Вывод всех тегов из определённого раздела сайта — различия между версиями
Alexei (обсуждение | вклад) |
Vitaliks (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | '''Актуально для версии | + | '''Актуально для версии 20''' |
По умолчанию можно вывести только все теги сайта. Если возникает ситуация, когда необходимо вывести теги только определённого раздела, можно прибегнуть к выборкам средствами API. | По умолчанию можно вывести только все теги сайта. Если возникает ситуация, когда необходимо вывести теги только определённого раздела, можно прибегнуть к выборкам средствами API. | ||
− | Напишем простой кастомный макрос, который позволит нам осуществить вывод тегов указанного раздела. Для этого в файл /classes/ | + | Напишем простой кастомный макрос, который позволит нам осуществить вывод тегов указанного раздела. Для этого в файл /classes/components/content/customMacros.php поместим следующий метод: |
<source lang="php"> | <source lang="php"> | ||
− | public function getTags($id=0,$template = 'default',$dept=1) { | + | 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(); | + | $resArray = array(); |
− | + | $select = new selector('pages'); | |
$select->where('hierarchy')->page($id)->childs($dept); | $select->where('hierarchy')->page($id)->childs($dept); | ||
− | $resArray=$select->result(); | + | $resArray = $select->result(); |
− | + | $tags = array(); | |
− | + | foreach ($resArray as $key=>$value) { | |
− | foreach($resArray as $key=>$value){ | ||
$hierarchy = umiHierarchy::getInstance(); | $hierarchy = umiHierarchy::getInstance(); | ||
$page = $hierarchy->getElement($value->id); | $page = $hierarchy->getElement($value->id); | ||
− | $t=$page->getValue('tags'); | + | $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; | $blockItems['subnodes:items'] = $items; | ||
return def_module::parseTemplate($items_template, $blockItems); | return def_module::parseTemplate($items_template, $blockItems); | ||
− | + | } | |
</source> | </source> | ||
Метод получает все значения из поля tags и удаляет повторяющиеся значения, на выходе мы получаем xml c перечислением всех тегов раздела, который указан в качестве первого параметра (id раздела), в качестве третьего параметра указывается глубина выборки. | Метод получает все значения из поля tags и удаляет повторяющиеся значения, на выходе мы получаем xml c перечислением всех тегов раздела, который указан в качестве первого параметра (id раздела), в качестве третьего параметра указывается глубина выборки. | ||
− | Чтобы метод работал для всех пользователей, необходимо его добавить в файл permissions.custom.php в массив content | + | Чтобы метод работал для всех пользователей, необходимо его добавить в файл /classes/components/content/permissions.custom.php в массив content: |
+ | |||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | /** Группы прав на функционал модуля */ | ||
+ | $permissions = [ | ||
+ | /** Просмотр контента */ | ||
+ | 'content' => [ | ||
+ | 'getTags' | ||
+ | ] | ||
+ | ]; | ||
+ | </source> | ||
+ | |||
[[Категория:Написание кастомных макросов]] | [[Категория:Написание кастомных макросов]] |
Текущая версия на 09:09, 30 апреля 2019
Актуально для версии 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 раздела), в качестве третьего параметра указывается глубина выборки. Чтобы метод работал для всех пользователей, необходимо его добавить в файл /classes/components/content/permissions.custom.php в массив content:
<?php
/** Группы прав на функционал модуля */
$permissions = [
/** Просмотр контента */
'content' => [
'getTags'
]
];