Как для каждой категории сделать свой шаблон?
galina2601 5-07-2013, 12:00 22 212 Уроки по CMS / Уроки по DLEЕсть сайт с парой-тройкой основных категорий, в которых куча подкатегорий. Надо чтобы для каждой основной категории появлялась своя шапка и свое меню.
Как это сделать для сайта на движке DataLife Engine?
Вот именно с такой проблемой мне и пришлось столкнуться, создавая один персональный сайт.
В самом движке решения не нашлось, ну или не хватило ума найти ?.
Вернее сказать, те варианты, которые предусмотрены в движке, не устраивают.
Что там есть?
По-первых, есть возможность для категории сменить шаблон сайта.
Наверное, это оправдано, если каждая из категорий - это абсолютно не связанная друг с другом тема и нужна видимость того, что попадаешь на другой сайт, с собственной навигацией и дизайном.
Увы, нам это не надо.
Во-вторых, можно сменить шаблоны полной и короткой новостей. Это отличная возможность сделать разнообразный вывод новостей - в одну колонку, в несколько, с большой картинкой-превьюшкой и так далее.
Но нам то нужно совсем не это.
Нам надо создать свой шаблон для каждой категории.
Для этого выполняем следующее:
Создаем отдельные файлы main.tpl для каждой категории.
Для этого, просто копируем файл main.tpl с новым именем. А вот имя должно быть ОБЯЗАТЕЛЬНО следующего вида:
main_kategorija.tpl
Вместо слова kategorija подставляем имя нашей категории.
Правим этот новый файл, вставляем нужные пункты меню, меняем картинку в шапке и так далее.
После этого находим файл index.php, который находится в корне сайта, открываем его.
Находим строчку:
И заменяем ее на следующий код:
$f_ = ($newsid !== 0) ? //Если вывод конкретной новости в полном формате
'main_' . $cat_info[$category_id]['alt_name'] . '.tpl' : //То берем ее шаблон
(($do == 'cat') ? 'main_' . $category . '.tpl' : 'main.tpl' ); //Если вывод категории, то берем ее шаблон, иначе - основной<
if (file_exists(TEMPLATE_DIR . '/'. $f_)) { //Есть файл шаблона для конкретной категории<
$catTemplate = $f_;
}else{//Нет файла шаблона для конкретной категории, припишем родительский шаблон (если у нас ПОДкатегория)
$parentid_ = $cat_info[$category_id]['parentid'];
$alt_name_cat_ = $cat_info[$parentid_]['alt_name'];
while (isset($alt_name_cat_)) //Есть имя, т.е. не самый верх!
{
if (isset ($alt_name_cat_)&file_exists(TEMPLATE_DIR . '/'. 'main_' . $alt_name_cat_ . '.tpl')) {
$catTemplate = 'main_' . $alt_name_cat_ . '.tpl';
break;
}else{
$parentid_ = $cat_info[$parentid_]['parentid'];
$alt_name_cat_ = $cat_info[$parentid_]['alt_name'];
}
}
}
$catTemplate = isset ($catTemplate)&&(file_exists(TEMPLATE_DIR . '/'. $catTemplate)) ? $catTemplate : 'main.tpl'; //Проверим присутствие файла шаблона
$tpl->load_template ( $catTemplate );
Данный скрипт работает следующим образом:
Если есть шаблон для какой-то категории, именно он и будет выводиться, а во всех остальных случаях будет выводится шаблон main.tpl.
Вот и вся премудрость.