Вывод всех тегов из определённого раздела сайта — различия между версиями
Mad grant (обсуждение | вклад) |
Alexei (обсуждение | вклад) |
||
Строка 7: | Строка 7: | ||
public function getTags($id=0,$template = 'default',$dept=1) { | public function getTags($id=0,$template = 'default',$dept=1) { | ||
$array_res = array(); | $array_res = array(); | ||
− | list ($ | + | list($items_template, $item_template) = def_module::loadTemplates('/content/' . $template, 'items', 'item'); |
$resArray=array(); | $resArray=array(); | ||
$select = new selector('pages'); | $select = new selector('pages'); | ||
Строка 27: | Строка 27: | ||
foreach ($tags as $tag) { | 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); | ||
} | } | ||
</source> | </source> |
Версия 13:36, 8 октября 2014
Актуально для версии 2.9
По умолчанию можно вывести только все теги сайта. Если возникает ситуация, когда необходимо вывести теги только определённого раздела, можно прибегнуть к выборкам средствами API.
Напишем простой кастомный макрос, который позволит нам осуществить вывод тегов указанного раздела. Для этого в файл /classes/modules/content/__custom.php в класс __custom_content поместим следующий метод:
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.