Как вывести список сайтов системы — различия между версиями
Материал из Umicms
Mad grant (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
Строка 28: | Строка 28: | ||
$domain_col = domainsCollection::getInstance(); | $domain_col = domainsCollection::getInstance(); | ||
$domains_list = $domain_col->getList(); | $domains_list = $domain_col->getList(); | ||
+ | $total = count($domains_list); | ||
$domain = array(); | $domain = array(); | ||
Строка 47: | Строка 48: | ||
} | } | ||
$domains = array('subnodes:domains' => $domains); | $domains = array('subnodes:domains' => $domains); | ||
+ | $domains['total'] = $total; | ||
return def_module::parseTemplate($domains_template, $domains); | return def_module::parseTemplate($domains_template, $domains); | ||
Строка 69: | Строка 71: | ||
<item host="domain3.ru" id="3" name="молодая, перспективная фирма"/> | <item host="domain3.ru" id="3" name="молодая, перспективная фирма"/> | ||
</domains> | </domains> | ||
+ | <total>3</total> | ||
</udata> | </udata> | ||
</source> | </source> |
Текущая версия на 09:45, 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();
$total = count($domains_list);
$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);
$domains['total'] = $total;
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>
<total>3</total>
</udata>
Элементы и атрибуты
<domains>
Ветвь, содержащая элементы item — сайты.
<item>
Элемент, описывающий отдельный сайт.
@host
Домен сайта.
@id
Идентификатор сайта.
@is_current
Является ли сайт текущим.
@name
Имя сайта, которое задается в модуле "Конфигурации"->"Домены"->"Свойство домена".
@is_default
Является ли сайт основным, то есть первым в модуле "Структура".
<total>
Количество сайтов в системе.