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

Часто возникают ситуации, когда нужно разные категории в Joomla! выводить с помощью индивидуальных шаблонов. Например, категория новостей выводится своим шаблоном, а категрия статей должна выводиться своим шаблоном, сильно отличающимся от шаблона вывода новостей Joomla. Здесь приводиться простой способ для того как это можно сделать на уровне шаблонов вывода стандартного com_content, не затрагивая ядра Joomla.

 

Рассмотрев структуру стандартного компонента com_content  в Joomla, скопируем файлы вывода шаблонов категорий в наш шаблон Joomla, если их еще там нет. Я рассмотрю только шаблон вывода блога категории:

  • {root}\templates\{ШАБЛОН}\html\com_content\category\blog.php - начальный шаблон
  • {root}\templates\{ШАБЛОН}\html\com_content\category\blog_item.php - шаблон материала
  • {root}\templates\{ШАБЛОН}\html\com_content\category\blog_links.php- шаблон ссылок на следующие материалы

Первым будет загружать шаблон вывода blog.php, который в свою очередь использует два других шаблона. Для решения задачи не понадобиться затрагивать файлы ядра Joomla, а будут использоваться только шаблоны.

Так как первым будет загружаться blog.php, то соответсвенно манипуляции нужно проводить с ним. Можно добавить в него нужное условие для проверки категории Joomla. После проверки запрета прямого доступа добавляем:

01.<?php // no direct access
02.defined('_JEXEC') or die('Restricted access');
03.//Задаем ID категорий
04.$categories = '3,1,31';
05.//Выбираем категории в массив
06.$categories = explode(',', $categories);
07.//Проверяем на соответствие категории и загружаем нужный шаблон
08.for ($i = 0; $i < count($categories); $i++) {   
09.if ($this->items[0]->catid === $categories[$i]) {
10.$this->_layout = 'myblog';
11.$this->display();
12.$check = true;
13.break;
14.}
15.}
16.// Если не совпадает условие выводим обычный шаблон
17.if (!isset($check)) :
18.$cparams =& JComponentHelper::getParams('com_media');
19.?>

И в конце файла закрываем условие:

1.<?php endif; ?>

Разберу немного код:

В переменную $categories задаем ID категорий, которые нужно выводить отдельным шаблоном, через запятую. Дальше соответсвенно это все дело упорядочиваем в массив и выбираем первый элемент, для того чтобы определить выводимую категорию. Затем сравниваем эту категорию с заданными в переменной $categories и если находиться совпадение устанавливаем наш шаблон и выводим его. Если совпадений не найдено, то переменная $check не устанавливается и выводиться обычный шаблон blog.php.

Все что осталось сделать это создать в той же директории файлы нашего шаблона:

  • {root}\templates\{ШАБЛОН}\html\com_content\category\myblog.php - начальный шаблон
  • {root}\templates\{ШАБЛОН}\html\com_content\category\myblog_item.php - шаблон материала
  • {root}\templates\{ШАБЛОН}\html\com_content\category\myblog_links.php- шаблон ссылок на следующие материалы

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