Вывод всех тегов из определённого раздела сайта
Актуально для версии 20
По умолчанию можно вывести только все теги сайта. Если возникает ситуация, когда необходимо вывести теги только определённого раздела, можно прибегнуть к выборкам средствами API.
Напишем простой кастомный макрос, который позволит нам осуществить вывод тегов указанного раздела. Для этого в файл /classes/components/content/customMacros.php поместим следующий метод:
public function getTags($id = 0, $template = 'default', $dept = 1) {
$array_res = array();
list($items_template, $item_template) = def_module::loadTemplates('/content/' . $template, 'items', 'item');
$resArray = array();
$select = new selector('pages');
$select->where('hierarchy')->page($id)->childs($dept);
$resArray = $select->result();
$tags = array();
foreach ($resArray as $key=>$value) {
$hierarchy = umiHierarchy::getInstance();
$page = $hierarchy->getElement($value->id);
$t = $page->getValue('tags');
if (count($t) != 0 && $t != NULL) {
$tags = array_merge($tags, $t);
}
}
$tags = array_unique($tags);
foreach ($tags as $tag) {
$item['attribute:value'] = $tag;
$items[] = def_module::parseTemplate($item_template, $item);
}
$blockItems = array();
$blockItems['subnodes:items'] = $items;
return def_module::parseTemplate($items_template, $blockItems);
}
Метод получает все значения из поля tags и удаляет повторяющиеся значения, на выходе мы получаем xml c перечислением всех тегов раздела, который указан в качестве первого параметра (id раздела), в качестве третьего параметра указывается глубина выборки. Чтобы метод работал для всех пользователей, необходимо его добавить в файл permissions.custom.php в массив content:
<?php
/** Группы прав на функционал модуля */
$permissions = [
/** Просмотр контента */
'content' => [
'getTags'
]
];