Textpattern. Иерархический список категорий.
Для вывода иерархического списка категорий в CMS Textpattern я пользовался плагином stw_category_tree. Это было лучшее, что я смог найти для вывода списка категорий почти так, как мне надо. Из того что мне так и не получилось сделать при помощи этого плагина: выделение текущих категорий статьи (когда открыта статья) и сортировка списка категорий по алфавиту. По сортировке поясню: я использую Multi-Lingual Publishing Pack для нескольких языков на сайте, и stw_category_tree выводит список категорий только в одном порядке. Этот порядок определяется по названиям категорий (отображаются в URL и всегда записываются латинскими символами), а не по заголовкам категорий, которые отображаются на страницах сайта.
Через некоторое время использования плагина была выявлена более существенная проблема, смириться с которой я не мог. Это было число запросов к БД, которые выполнялись плагином. Для вывода сравнительно небольшого дерева категорий плагину требовалось выполнить около 30 запросов к БД!
В результате я написал плагин own_category_tree очень похожий по используемым атрибутам на плагин stw_category_tree, но немного упрощенный. И самое главное для вывода дерева категорий плагину достаточно выполнить всего один запрос к БД!
Плагин принимает следующие атрибуты:
start
– с какого узла выводить дерево категорий;section
– используется, если необходимо переопределить секцию;type
– определяет, какой тип категорий следует использовать (‘article’, ‘image’ или ‘link’). По-умолчанию используется ‘article’;cssid
– определяет свойствоid
которое будет присвоено самому вышестоящему тегуul
;onclass
– определяет свойствоclass
, которое будет присвоено для текущей выбранной категории;wraptag
– тег, вовнутрь которого помещается один уровень иерархического списка. Может использоватьсяul
илиdiv
. По-умолчаниюul
;break
– разделительный тег для каждого элемента списка. Может использоватьсяbr
,hr
,li
. По-умолчаниюli
.
Плагин строит дерево категорий следующим образом. В режиме отображения списка статей, если не выбрана категория, выводит список категорий 1-го уровня (так будем называть категории, у которых «родитель» root или заданный при помощи атрибута start
). Если категория выбрана, то плагин выводит список 1-го уровня и выводит ветвь дерева категорий, на которой находится выбранная категория. Причем ветвь отображается до выбранной категории плюс один уровень вглубь, если конечно таковой имеется. Аналогично выводится список категорий и при просмотре статьи, только вместо выбранной категории используются категории статьи.
Ну и дополнительный бонус – список категорий теперь выводится в отсортированном виде.
Плагин доступен для скачивания на странице проекта на GitHub.
(#) Андрей:
Здравствуйте,
подскажите пожалуйста – как сделать сортировку не по имени а по id категории? благодарю заранее :)