Как вывести список сайтов системы

Материал из Umicms
Версия от 09:39, 4 апреля 2014; Mad grant (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9.6''' == Задача == У Вы используете мультисайтовость и у Вас все сайт…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Актуально для версии 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>