тогда начнем с начала.
в Шаблоне данных : объект каталога - id 72, подтип Игрушки: id 314.
Поле в котором хранятся записанные артикулы товаров через запятую:
<property id="443" name="rekomenduem" type="string">
<title>Рекомендуем</title>
<value>2750,2770,2686</value>
</property>
Значение артикула товара хранится в:
<group id="2743" name="item_properties">
<title>Характеристики товара</title>
<property id="408" name="artikul" type="string">
<title>Артикул</title>
<value>2730</value>
</property>
</group>
в шаблоне object-view.xsl где надо вывести рекомендованные товары передаем значение из строки Рекомендуем в переменную:
<xsl:variable name="rekom" select="//property[@name='rekomenduem']/value"/>
на всякий случай проверяем есть ли значение в этой переменной:
<xsl:value-of select="$rekom"/>
ниже вызываем макрос:
<xsl:apply-templates select="document(concat('udata://catalog/getList/',$rekom))/udata/lines/item" mode="mylist"/>
данные которого обрабатываются по указанному шаблону:
<xsl:template match="item" mode="mylist">
<xsl:value-of select="document(concat('upage://', @id, '.h1'))/udata/property/value" disable-output-escaping="yes"/>
</xsl:template>
Макрос размещаем в файле
classes/modules/catalog/__custom.phpКод макроса:
public function getList($rekom){
//в $myStr передаете строку id товаров/артикулов из поля (лучше перечислять их без пробельных символов)
$varianty = explode(",",$rekom);
$hierarchy = umiHierarchy::getInstance();
//Получаем id иерархического типа
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();
$hierarchyType = $hierarchyTypes->getTypeByName("catalog", "object");
$hierarchyTypeId = $hierarchyType->getId();
//Создаем и подготавливаем выборку
$sel = new umiSelection;
$sel->addElementType($hierarchyTypeId);
$this->autoDetectFilters($sel,72);
//Получаем результаты
$result = umiSelectionsParser::runSelection($sel); //Массив id объектов
//возьмем пример задания шаблонов из /catalog/class.php см.функцию getObjectsList
$template = "default";
list($template_block, $template_block_empty, $template_block_search_empty, $template_line) = def_module::loadTemplates("catalog/".$template, "objects_block", "objects_block_empty", "objects_block_search_empty", "objects_block_line");
$block_arr = Array();
$lines = Array();
foreach($result as $objectId){//пробегаемся по массиву с айдишниками из строки
$element = $hierarchy->getElement($objectId);
//Проверим, что мы получили правильный результат
if(!$element) continue;
foreach($varianty as $articulId){//пробегаемся по массиву с айдишниками из строки
if($articulId==$element->getValue("artikul")){
$line_arr = Array();//массив где будут аттрибуты товара id ссылка и тд
$line_arr['attribute:id'] = $objectId;
$line_arr['attribute:alt_name'] = $element->getAltName();
$line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($objectId);
$line_arr['xlink:href'] = "upage://" . $objectId;
$line_arr['node:text'] = $element->getName();
$lines[] = self::parseTemplate($template_line, $line_arr, $objectId);
}
}
}
$block_arr['subnodes:lines'] = $lines;
return $this->parseTemplate($template_block, $block_arr,0);
}
Проверка в адресной строке:
http://umi.site.com/udata://catalog/getList/2750,2770,2686/udata/lines/itemполучаем:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="catalog" method="getList" generation-time="1.861841">
<lines>
<item id="16100" alt_name="dom_so_svetom" link="/shop/toys/sylvanian_families/domiki_sylvanian_families/dom_so_svetom/" xlink:href="upage://16100">Дом со светом</item>
<item id="16103" alt_name="nabor_minimarket" link="/shop/toys/sylvanian_families/domiki_sylvanian_families/nabor_minimarket/" xlink:href="upage://16103">Набор Минимаркет</item>
<item id="16093" alt_name="nabor_shkola" link="/shop/toys/sylvanian_families/domiki_sylvanian_families/nabor_shkola/" xlink:href="upage://16093">Набор Школа</item>
</lines>
</udata>
таки образом
только сейчас, когда я вот так стала последовательно все прописывать сюда
все заработало