Как найти все страницы с похожим именем

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

Актуально для версии 2.9.6

Задача

Если Вы столкнулись с данной задачей, то решить её стандартными средствами нельзя. Необходимо написать кастомный макрос, пример оного дан ниже.

Решение

%custom getSimilarPages()% — выводит все возможные страницы контента(со всех сайтов и языковых версий) с похожим именем.

Параметры: custom getSimilarPages([$name = 'test', $template = 'default'])

$name

  Имя страницы, с которым будет произведен поиск.

$template

  Принимает имя шаблона, по которому выводится результат макроса, значение по-умолчанию 'default' В XSLT-шаблонизаторе не используется.

Для применения этого макроса скопируйте код макроса в файл /classes/modules/custom.php.

Код макроса

public function getSimilarPages($name = 'test', $template = 'default'){
	
	list($items_template, $item_template, $empty_template) = def_module::loadTemplates('content/' . $template, 'items', 'item', 'empty');
	
	$pages = new selector('pages');
	$pages->types('hierarchy-type')->name('content');
	$pages->where('domain')->equals(false);
	$pages->where('lang')->equals(false);
	$pages->where('name')->ilike($name . '%');
	$pages->order('id')->asc();
	$total = $pages->length();
	if($total == 0){
	   $empty = array();
	   $empty['request'] = $name;
	   return def_module::parseTemplate($empty_template, $empty);
	}
	$pages_arr = $pages->result();
	
	$domains_col = domainsCollection::getInstance();
	$langs_col = langsCollection::getInstance();
   
	$item = array();
	$items= array(); 
	
	foreach($pages_arr as $page){
		$item['attribute:id'] = $page->getId();
		$item['attribute:name'] = $page->getName();
		$item['attribute:link'] = $page->link;
		$item['attribute:alt-name'] = $page->getAltName();
		$item['attribute:domain'] = $domains_col->getDomain($page->getDomainId())->getHost();
		$item['attribute:lang'] = $langs_col->getLang($page->getLangId())->getPrefix();
		$items[] = def_module::parseTemplate($item_template, $item);
	}
	$items = array('subnodes:pages' => $items);
	$items['total'] = $total;

	return def_module::parseTemplate($items_template, $items);
}