Делаем аналог postsByTag для блогов (вывод блогов по тегам)
Материал из Umicms
Актуально для версии 2.9
Для того,чтобы вывести список блогов содержащих в описании какой либо тег, добавим соответствующую проверку в макрос blogsList. Скопируем код макроса в файл ~/classes/modules/blogs20/__custom.php после строки //TODO: Write here your own macroses и изменим его, чтобы в качестве параметра он принимал тэг, блоги с которым нужно вывести.
<?php
public function blogsByTag($tag,$blogsCount = false, $domainId = false, $template = 'default') {
list($sTemplateBlock, $sTemplateLine) = def_module::loadTemplates('blogs20/'.$template, 'blogs_list_block', 'blogs_list_line');
$page = (int)getRequest('p');
$sel = new umiSelection;
$hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("blogs20", "blog")->getId();
$sel->addElementType($hierarchy_type_id);
$sel->addPermissions();
$sel->addLimit($blogsCount,$page*$blogsCount);
$typesCollection = umiObjectTypesCollection::getInstance();
$typeId = $typesCollection->getTypeByHierarchyTypeId($hierarchy_type_id);
$postType = $typesCollection->getType($typeId);
$sel->addPropertyFilterNotEqual($postType->getFieldId('only_for_friends'), 1);
$sel->addPropertyFilterEqual($postType->getFieldId('tags'), $tag);
$sel->setOrderByProperty($postType->getFieldId('publish_time'), false);
$result = umiSelectionsParser::runSelection($sel);
$total = umiSelectionsParser::runSelectionCounts($sel);
$oHierarchy = umiHierarchy::getInstance();
$result = array_unique($result);
$aLines = array();
foreach($result as $iBlogId) {
$oBlog = $oHierarchy->getElement($iBlogId);
$aLineParam = array();
$aLineParam['attribute:bid'] = $iBlogId;
$aLineParam['attribute:title'] = $oBlog->getValue('title');
$aLineParam['attribute:link'] = $oHierarchy->getPathById($iBlogId);
$aLineParam['node:name'] = $oBlog->getName();
$aLines[] = def_module::parseTemplate($sTemplateLine, $aLineParam, $iBlogId);
$this->pushEditable("blogs20", "blog", $iBlogId);
}
$aBlockParam = array();
$aBlockParam['subnodes:items'] = $aBlockParam['void:lines'] = $aLines;
$aBlockParam['per_page'] = $blogsCount;
$aBlockParam['total'] = $total;
return def_module::parseTemplate($sTemplateBlock, $aBlockParam);
}
?>
Данный макрос принимает в качестве первого параметра тэг, по которому нужно искать блоги, второй параметр количество на странице, третьим параметром идёт id домена а четвёртым шаблон (по умолчанию tpls/blogs20/default.tpl)