05.07.2013

Как для каждой категории сделать свой шаблон?

Есть сайт с парой-тройкой основных категорий, в которых куча подкатегорий. Надо чтобы для каждой основной категории появлялась своя шапка и свое меню.

Как это сделать для сайта на движке DataLife Engine?

Вот именно с такой проблемой мне и пришлось столкнуться, создавая один персональный сайт.

В самом движке решения не нашлось, ну или не хватило ума найти ?.

Вернее сказать, те варианты, которые предусмотрены в движке, не устраивают.

Что там есть?

По-первых, есть возможность для категории сменить шаблон сайта.

Наверное, это оправдано, если каждая из категорий - это абсолютно не связанная друг с другом тема и нужна видимость того, что попадаешь на другой сайт, с собственной навигацией и дизайном.

Увы, нам это не надо.

Во-вторых, можно сменить шаблоны полной и короткой новостей. Это отличная возможность сделать разнообразный вывод новостей - в одну колонку, в несколько, с большой картинкой-превьюшкой и так далее.


Разные шаблоны для вывода коротких новостей

Но нам то нужно совсем не это.


Нам надо создать свой шаблон для каждой категории.

Для этого выполняем следующее:

 

Создаем отдельные файлы main.tpl для каждой категории.

Для этого, просто копируем файл main.tpl с новым именем. А вот имя должно быть ОБЯЗАТЕЛЬНО следующего вида:

main_kategorija.tpl

Вместо слова kategorija подставляем имя нашей категории. 

Правим этот новый файл, вставляем нужные пункты меню, меняем картинку в шапке и так далее.

После этого находим файл index.php, который находится в корне сайта, открываем его.

Находим строчку:

$tpl->load_template ( 'main.tpl' );

И заменяем ее на следующий код:

 

 

$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.

 

Вот и вся премудрость.