Как вывести список сайтов системы — различия между версиями
Материал из Umicms
Mad grant (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9.6''' == Задача == У Вы используете мультисайтовость и у Вас все сайт…») |
(нет различий)
|
Версия 09:39, 4 апреля 2014
Актуально для версии 2.9.6
Содержание
Задача
У Вы используете мультисайтовость и у Вас все сайты связаны между собой, то есть, например, на одном сайте форум, на другом блог, то у Вас может возникнуть задача по выводу перечня сайтов системы. Если Вы столкнулись с данной задачей, то решить её стандартными средствами нельзя. Необходимо написать кастомный макрос, пример оного дан ниже.
Решение
%custom getDomainsList()% — Выводит список сайтов системы.
Параметры: custom getDomainsList([$template = 'default'])
$template
Принимает имя шаблона, по которому выводится результат макроса, значение по-умолчанию 'default' В XSLT-шаблонизаторе не используется.
Для применения этого макроса скопируйте код макроса в файл /classes/modules/custom.php.
Код макроса
public function getDomainsList($template = 'default'){
list($domains_template, $domain_template) = def_module::loadTemplates('content/' . $template, 'domains', 'domain');
$regedit = regedit::getInstance();
$domain_col = domainsCollection::getInstance();
$domains_list = $domain_col->getList();
$domain = array();
$domains = array();
$cms_contoller = cmsController::getInstance();
$current_domain_id = $cms_contoller->getCurrentDomain()->getId();
foreach($domains_list as $domain_item){
$domain['attribute:host'] = $domain_item->getHost();
$domain['attribute:id'] = $domain_col->getDomainId($domain['attribute:host']);
if(intval($domain['attribute:id']) == $current_domain_id){
$domain['attribute:is_current'] = 1;
}
$domain['attribute:name'] = $regedit->getVal('//settings/site_name/'. $domain['attribute:id'] . '/' . $domain_item->getDefaultLangId());
$domain['attribute:is_default'] = $domain_item->getIsDefault();
$domains[] = def_module::parseTemplate($domain_template, $domain);
unset($domain['attribute:is_current']);
}
$domains = array('subnodes:domains' => $domains);
return def_module::parseTemplate($domains_template, $domains);
}
Применение в xslt
Пример вызова
udata://custom/getDomainsList
XML-ответ UData
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="custom" method="getDomainsList" generation-time="0.005113">
<domains>
<item host="domain1.ru" id="1" is_current="1" name="лучший сайт для..." is_default="1"/>
<item host="domain2.ru" id="2" name="бла бла бла"/>
<item host="domain3.ru" id="3" name="молодая, перспективная фирма"/>
</domains>
</udata>