<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.umisoft.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B9_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%B8%D0%B7_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B8</id>
	<title>Исключение виртуальных копий страниц из выборки - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.umisoft.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B9_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%B8%D0%B7_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B8"/>
	<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B9_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%B8%D0%B7_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B8&amp;action=history"/>
	<updated>2026-05-14T20:33:09Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B9_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%B8%D0%B7_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B8&amp;diff=5703&amp;oldid=prev</id>
		<title>Alexei: Новая страница: «&#039;&#039;&#039;Актуально для версии 2.9&#039;&#039;&#039;  Если у Вас на сайте присутствуют виртуальные копии страниц, то,…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B9_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%B8%D0%B7_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B8&amp;diff=5703&amp;oldid=prev"/>
		<updated>2013-06-14T13:13:53Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9&amp;#039;&amp;#039;&amp;#039;  Если у Вас на сайте присутствуют виртуальные копии страниц, то,…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Если у Вас на сайте присутствуют виртуальные копии страниц, то, когда Вы делаете выборку с помощью USel, в выборку попадают все эти виртуальные копии, что не очень удобно. Хотелось бы, чтобы в выборку попадал только 1 экземлпляр, а остальные копии просто не выводились. В иерархии виртуальные копии являются отдельными объектами, у которых есть свои идентификаторы. Средствами USel исключить виртуальные копии нельзя, поэтому рассмотрим следующий вариант как это можно реализовать:&lt;br /&gt;
&lt;br /&gt;
Виртуальные копии страниц в качестве источника данных используют один и тот же объект, в таком случае можно средствами API произвести выборку страниц и при выборке страниц получать id объекта, который используется в качестве источника , в случае появления объекта, который уже был у прошлых страниц ничего не возвращать. Для выборки мы рекомендуем использовать класс selector, документация по которому доступна по адресу:&lt;br /&gt;
http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/proizvolnye_vyborki/selector/&lt;br /&gt;
&lt;br /&gt;
Получить объект, который используется в качестве источника информации для страницы можно методом getObject() класса umiHierarchyElement, описание работы c этим классом доступно по адресу:&lt;br /&gt;
http://api.docs.umi-cms.ru/spravochnik_po_klassam_yadra_umicms/model_ierarhii/umihierarchyelement/&lt;br /&gt;
&lt;br /&gt;
Ну а теперь и сам пример реализации.&lt;br /&gt;
&lt;br /&gt;
Данный код необходимо вставить в шаблон кастома, classes/modules/custom.php, после строки &amp;quot;//TODO: Write your own macroses here&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public function noVirtual ($id) {&lt;br /&gt;
 $mas = array();&lt;br /&gt;
 $pages = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
 $pages-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;id($id);&lt;br /&gt;
 $pages-&amp;gt;types(&amp;#039;hierarchy-type&amp;#039;)-&amp;gt;name(&amp;#039;catalog&amp;#039;, &amp;#039;object&amp;#039;);&lt;br /&gt;
 $pages-&amp;gt;where(&amp;#039;best_item&amp;#039;)-&amp;gt;equals(1);&lt;br /&gt;
&lt;br /&gt;
 foreach($pages as $page) {&lt;br /&gt;
    &lt;br /&gt;
    $a = $page-&amp;gt;getObject();&lt;br /&gt;
    $a_id = $a-&amp;gt;id;&lt;br /&gt;
      if (!in_array($a_id, $mas)) {&lt;br /&gt;
      &lt;br /&gt;
        $mas[]=$a_id;&lt;br /&gt;
        $item_arr[&amp;#039;attribute:id&amp;#039;]=$a_id;&lt;br /&gt;
        $item_arr[&amp;#039;node:value&amp;#039;]= $page-&amp;gt;name;&lt;br /&gt;
        $items[] = $item_arr;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
$block_arr[&amp;#039;items&amp;#039;][&amp;#039;nodes:item&amp;#039;] = $items;&lt;br /&gt;
return $block_arr;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данный кастом проводит выборку по полю best_item, Вы передаете id типа данных, по которому следует эту выборку запустить, и  кастом вернет выборку уже без виртуальных копий страниц. Если нужно вывести больше информации об объектах выборки - на выходе кастом отдает имя объекта и его id, а по его id уже можно достать что угодно.&lt;br /&gt;
&lt;br /&gt;
[[Категория:API]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
</feed>