четверг, 24 ноября 2011 г.
Меню из категорий новостей (tt_news) с картинками и на разных языках
16:35 |
Автор:
Вадим Гиркало |
Изменить сообщение
Казалось бы, tt_news имеет специальный тип вывода категорий - CATMENU. Но то ли скудно у него обстоят дела с картинками, то ли я с чем-то не до конца разобрался... Короче, решил сделать вывод списка категорий с помощью TypoScript. И пока не жалею.
Внешне все выглядит так:
Теперь по функционалу:
1. Данное меню отображает названия и изображения всех подкатегорий, которые
входят в состав категории - parent_category, которая у меня задана в константах шаблона страницы.
2. Клик по картинке или названию категории выводит записи новостей, относящиеся только к данной категории.
3. Т.к. сайт многоязычный, то при смене языка меняются и названия категорий. Это был самый трудный момент реализации, т.к. локализация категорий в новостях выполнена довольно странно и нетрадиционно для Typo3.
Вот готовый typoscript для решения данной задачи:
lib.catmenu >
lib.catmenu = COA
lib.catmenu {
10 = CONTENT
10 {
wrap = |
table = tt_news_cat
select {
# CONCAT(title,"|",title_lang_ol) - сливает все языки в одну строку
# разделителем служит символ палка - "|"
selectFields = uid, image, CONCAT(title,"|",title_lang_ol) AS catname
pidInList = {$news_folder_id}
orderBy = uid
where = parent_category={$parent_category} AND deleted=0 AND hidden=0
}
renderObj = COA
renderObj {
wrap = <div class="category">|</div>
10 = COA
10 {
# задаем id страницы которая будет отображать новости
# данной категории
stdWrap.typolink.parameter.dataWrap = {$view_page_id}
# чтобы наша следующая страница со списком новостей знала
# id категории с которой нужно работать передаем ей
# в качестве параметра - tx_ttnews[cat]={field:uid}
stdWrap.typolink.additionalParams.dataWrap = &no_cache=1&tx_ttnews[cat]={field:uid}
stdWrap.typolink.wrap = |
stdWrap.typolink.ATagParams =
# вывод картинки
10 = IMAGE
10{
required=1
wrap = |
file.import=uploads/pics/
file.import.field=image
file.width=235c
file.height=235c
}
# вывод названия категории
20 = COA
20 {
wrap = <h3>|</h3>
10 = TEXT
10 {
field = catname
# разбиваем поле catname на элементы массива
# за счет разделителя - | (char code = 124)
# и берем нужный элемент по коду языка сайта - GP:L
split {
token.char = 124
returnKey.data = GP:L
}
}
}
}
}
}
}
P.S. Как это выглядит в живую можно посмотреть здесь, в видео ролике или на действующем сайте.
P.S. (2) Не забудьте настроить RealUrl (realurlconf.php) для красивого отображения категорий в адресной строке браузера. Вот необходимые для этого строки:
// news categories
'category_name' => array (
array(
'GETvar' => 'tx_ttnews[cat]',
'lookUpTable' => array(
'table' => 'tt_news_cat',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
Внешне все выглядит так:
Теперь по функционалу:
1. Данное меню отображает названия и изображения всех подкатегорий, которые
входят в состав категории - parent_category, которая у меня задана в константах шаблона страницы.
2. Клик по картинке или названию категории выводит записи новостей, относящиеся только к данной категории.
3. Т.к. сайт многоязычный, то при смене языка меняются и названия категорий. Это был самый трудный момент реализации, т.к. локализация категорий в новостях выполнена довольно странно и нетрадиционно для Typo3.
Вот готовый typoscript для решения данной задачи:
lib.catmenu >
lib.catmenu = COA
lib.catmenu {
10 = CONTENT
10 {
wrap = |
table = tt_news_cat
select {
# CONCAT(title,"|",title_lang_ol) - сливает все языки в одну строку
# разделителем служит символ палка - "|"
selectFields = uid, image, CONCAT(title,"|",title_lang_ol) AS catname
pidInList = {$news_folder_id}
orderBy = uid
where = parent_category={$parent_category} AND deleted=0 AND hidden=0
}
renderObj = COA
renderObj {
wrap = <div class="category">|</div>
10 = COA
10 {
# задаем id страницы которая будет отображать новости
# данной категории
stdWrap.typolink.parameter.dataWrap = {$view_page_id}
# чтобы наша следующая страница со списком новостей знала
# id категории с которой нужно работать передаем ей
# в качестве параметра - tx_ttnews[cat]={field:uid}
stdWrap.typolink.additionalParams.dataWrap = &no_cache=1&tx_ttnews[cat]={field:uid}
stdWrap.typolink.wrap = |
stdWrap.typolink.ATagParams =
# вывод картинки
10 = IMAGE
10{
required=1
wrap = |
file.import=uploads/pics/
file.import.field=image
file.width=235c
file.height=235c
}
# вывод названия категории
20 = COA
20 {
wrap = <h3>|</h3>
10 = TEXT
10 {
field = catname
# разбиваем поле catname на элементы массива
# за счет разделителя - | (char code = 124)
# и берем нужный элемент по коду языка сайта - GP:L
split {
token.char = 124
returnKey.data = GP:L
}
}
}
}
}
}
}
P.S. Как это выглядит в живую можно посмотреть здесь, в видео ролике или на действующем сайте.
// news categories
'category_name' => array (
array(
'GETvar' => 'tx_ttnews[cat]',
'lookUpTable' => array(
'table' => 'tt_news_cat',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
Подписаться на:
Комментарии к сообщению (Atom)
О себе
- Вадим Гиркало
- Фрилансер, веб-разработчик сайтов на базе бесплатной, мощнейшей и очень гибкой CMS системы - TYPO3.
Мой сайт
Позвонить мне в Skype
TOP - 3
-
Как я уже писал в одной своей заметке ( SEO и общие рекомендации ), для сайта очень важно, чтобы при обращении к заведомо несуществующей ст...
-
Дорабатывая очередной свой сайт столкнулся с такой проблемкой. В шапке сайта есть две флэш вставки - банер, который вставлен через конструкц...
-
Несмотря на то, что материала по данной тематике вроде бы и достаточно, но весь он носит кусочно-латочно-разрозненный характер, что мешает б...
2 коммент.:
Подтверждаю, отличное решение и работает "НА УРА".
Спасибо, Дмитрий! ;)
Отправить комментарий