<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.umisoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marina.Evlenteva&amp;*</id>
	<title>Umicms - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.umisoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marina.Evlenteva&amp;*"/>
	<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Marina.Evlenteva"/>
	<updated>2026-04-28T07:04:10Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%83%D0%B1%D1%80%D0%B0%D1%82%D1%8C_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B8_%D0%B8%D0%B7_%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%BE%D0%B2_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=8040</id>
		<title>Как убрать виртуальные копии из результатов поиска</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%83%D0%B1%D1%80%D0%B0%D1%82%D1%8C_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B8_%D0%B8%D0%B7_%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%BE%D0%B2_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=8040"/>
		<updated>2017-12-01T14:48:19Z</updated>

		<summary type="html">&lt;p&gt;Marina.Evlenteva: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.5&amp;#039;&amp;#039;&amp;#039; Начиная с версии 15 81380 Индексация виртуальных копий в модуле &amp;quot;Поиск&amp;quot; отключена!&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Если Вы столкнулись с данной задачей, то решить её стандартными средствами нельзя. Необходимо написать кастомный макрос, пример оного дан ниже. &lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
%custom copy_free_search()%&lt;br /&gt;
&lt;br /&gt;
Этот макрос полностью идентичен по всем параметрам и шаблонам системного макросу %search search_do()%, за исключением имени метода и того, что макрос, &lt;br /&gt;
если он находит виртуальные копии, то в результате оставляет только одну копия, причем исходную.&lt;br /&gt;
&lt;br /&gt;
Для применения этого макроса скопируйте код макроса в файл /classes/modules/custom.php.&lt;br /&gt;
&lt;br /&gt;
== Код макроса ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function copy_free_search($template = &amp;quot;default&amp;quot;, $search_string = &amp;quot;&amp;quot;, $search_types = &amp;quot;&amp;quot;, $search_branches = &amp;quot;&amp;quot;, $per_page = 0) {&lt;br /&gt;
	list(&lt;br /&gt;
		$template_block, $template_line, $template_empty_result, $template_line_quant&lt;br /&gt;
	) = self::loadTemplates(&amp;quot;search/&amp;quot;.$template,&lt;br /&gt;
		&amp;quot;search_block&amp;quot;, &amp;quot;search_block_line&amp;quot;, &amp;quot;search_empty_result&amp;quot;, &amp;quot;search_block_line_quant&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	if (!$search_string) $search_string = (string) getRequest(&amp;#039;search_string&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$block_arr = Array();&lt;br /&gt;
	$block_arr[&amp;#039;last_search_string&amp;#039;] = $search_string;&lt;br /&gt;
&lt;br /&gt;
	$search_string = urldecode($search_string);&lt;br /&gt;
	$search_string = htmlspecialchars($search_string);&lt;br /&gt;
	$search_string = str_replace(&amp;quot;. &amp;quot;, &amp;quot; &amp;quot;, $search_string);&lt;br /&gt;
	$search_string = trim($search_string, &amp;quot; \t\r\n%&amp;quot;);&lt;br /&gt;
	$search_string = str_replace(array(&amp;#039;&amp;quot;&amp;#039;, &amp;quot;&amp;#039;&amp;quot;), &amp;quot;&amp;quot;, $search_string);&lt;br /&gt;
&lt;br /&gt;
	$orMode = (bool) getRequest(&amp;#039;search-or-mode&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	if (!$search_string) return search::insert_form($template);&lt;br /&gt;
&lt;br /&gt;
	$arr_search_by_rels = array();&lt;br /&gt;
	if (!$search_branches) $search_branches = (string) getRequest(&amp;#039;search_branches&amp;#039;);&lt;br /&gt;
	$search_branches = trim(rawurldecode($search_branches));&lt;br /&gt;
	if (strlen($search_branches)) {&lt;br /&gt;
		$arr_branches = preg_split(&amp;quot;/[\s,]+/&amp;quot;, $search_branches);&lt;br /&gt;
		foreach ($arr_branches as $i_branch =&amp;gt; $v_branch) {&lt;br /&gt;
			$arr_branches[$i_branch] = def_module::analyzeRequiredPath($v_branch);&lt;br /&gt;
		}&lt;br /&gt;
		$arr_branches = array_map(&amp;#039;intval&amp;#039;, $arr_branches);&lt;br /&gt;
		$arr_search_by_rels = array_merge($arr_search_by_rels, $arr_branches);&lt;br /&gt;
		$o_selection = new umiSelection;&lt;br /&gt;
		$o_selection-&amp;gt;addHierarchyFilter($arr_branches, 100, true);&lt;br /&gt;
		$o_result = umiSelectionsParser::runSelection($o_selection);&lt;br /&gt;
		$sz = sizeof($o_result);&lt;br /&gt;
		for ($i = 0; $i &amp;lt; $sz; $i++) $arr_search_by_rels[] = intval($o_result[$i]);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (!$search_types) $search_types = (string) getRequest(&amp;#039;search_types&amp;#039;);&lt;br /&gt;
	$search_types = rawurldecode($search_types);&lt;br /&gt;
	if (strlen($search_types)) {&lt;br /&gt;
		$search_types = preg_split(&amp;quot;/[\s,]+/&amp;quot;, $search_types);&lt;br /&gt;
		$search_types = array_map(&amp;#039;intval&amp;#039;, $search_types);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$lines = Array();&lt;br /&gt;
	$result = searchModel::getInstance()-&amp;gt;runSearch($search_string, $search_types, $arr_search_by_rels, $orMode);&lt;br /&gt;
	$p = (int) getRequest(&amp;#039;p&amp;#039;);&lt;br /&gt;
	$total = sizeof($result);&lt;br /&gt;
	&lt;br /&gt;
	if($total != 0){&lt;br /&gt;
	&lt;br /&gt;
		if (!$per_page) $per_page = intval(getRequest(&amp;#039;per_page&amp;#039;));&lt;br /&gt;
		if (!$per_page) $per_page = $this-&amp;gt;per_page;&lt;br /&gt;
		&lt;br /&gt;
		$hierarchy_col = umiHierarchy::getInstance();&lt;br /&gt;
		&lt;br /&gt;
		foreach($result as $value){&lt;br /&gt;
			$objects_ids[] = $hierarchy_col-&amp;gt;getElement($value)-&amp;gt;getObjectId();&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		$objects_ids = array_unique($objects_ids);				&lt;br /&gt;
		unset($result);&lt;br /&gt;
		&lt;br /&gt;
		foreach($objects_ids as $value){&lt;br /&gt;
			$objects = $hierarchy_col-&amp;gt;getObjectInstances($value);&lt;br /&gt;
			$result[] = $objects[0];&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		$result = array_slice($result, $per_page * $p, $per_page);&lt;br /&gt;
&lt;br /&gt;
		$i = $per_page * $p;&lt;br /&gt;
&lt;br /&gt;
		foreach($result as $num =&amp;gt; $element_id) {&lt;br /&gt;
			$line_arr = Array();&lt;br /&gt;
&lt;br /&gt;
			$element = $hierarchy_col-&amp;gt;getElement($element_id);&lt;br /&gt;
&lt;br /&gt;
			if(!$element) continue;&lt;br /&gt;
&lt;br /&gt;
			$line_arr[&amp;#039;void:num&amp;#039;] = ++$i;&lt;br /&gt;
			$line_arr[&amp;#039;attribute:id&amp;#039;] = $element_id;&lt;br /&gt;
			$line_arr[&amp;#039;attribute:name&amp;#039;] = $element-&amp;gt;getName();&lt;br /&gt;
			$line_arr[&amp;#039;attribute:link&amp;#039;] = $hierarchy_col-&amp;gt;getPathById($element_id);&lt;br /&gt;
			$line_arr[&amp;#039;xlink:href&amp;#039;] = &amp;quot;upage://&amp;quot; . $element_id;&lt;br /&gt;
			$line_arr[&amp;#039;node:context&amp;#039;] = searchModel::getInstance()-&amp;gt;getContext($element_id, $search_string);&lt;br /&gt;
			$line_arr[&amp;#039;void:quant&amp;#039;] = ($num &amp;lt; count($result)-1? def_module::parseTemplate($template_line_quant, array()) : &amp;quot;&amp;quot;);&lt;br /&gt;
			$lines[] = def_module::parseTemplate($template_line, $line_arr, $element_id);&lt;br /&gt;
&lt;br /&gt;
			def_module::pushEditable(false, false, $element_id);&lt;br /&gt;
&lt;br /&gt;
			$hierarchy_col-&amp;gt;unloadElement($element_id);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$block_arr[&amp;#039;subnodes:items&amp;#039;] = $block_arr[&amp;#039;void:lines&amp;#039;] = $lines;&lt;br /&gt;
		$block_arr[&amp;#039;total&amp;#039;] = $total;&lt;br /&gt;
		$block_arr[&amp;#039;per_page&amp;#039;] = $per_page;&lt;br /&gt;
&lt;br /&gt;
		return def_module::parseTemplate($template_block, $block_arr);&lt;br /&gt;
	}else{&lt;br /&gt;
		return def_module::parseTemplate($template_empty_result, $block_arr);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Дополнительно ==&lt;br /&gt;
&lt;br /&gt;
А для того, чтобы дублирование контента, вызываемое использованием виртуальных копий, не портило SEO, примените решение из статьи:&lt;br /&gt;
[[Как_избежать_дублирования_контента_при_использовании_виртуальных_копий]]&lt;br /&gt;
[[category:Модуль Поиск]]&lt;/div&gt;</summary>
		<author><name>Marina.Evlenteva</name></author>
		
	</entry>
</feed>