Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Вывод количества объектов в категории. XSLT

Автор idu.kuruРаздел Шаблоны XSLT

Ответов: 6
Просмотров: 4741
Последний ответ 18 Октября 2014, 17:39:24
от idu.kuru
Вывод разных валют в разных доменах у каталога

Автор ivan23Раздел Настройка системы и модулей

Ответов: 3
Просмотров: 4601
Последний ответ 04 Апреля 2013, 22:05:40
от admin
Как добавить вывод информации и редактирование информации в профиль

Автор rellaiРаздел Шаблоны XSLT

Ответов: 7
Просмотров: 5551
Последний ответ 28 Апреля 2014, 08:13:27
от rellai
Вывод объектов каталога с отдельными характеристиками объектов в таблице

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 19
Просмотров: 13169
Последний ответ 16 Июля 2013, 16:53:58
от thecoder
Вывод ссылками названия тем "Входит в сюжеты" на главной странице новостей

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 4165
Последний ответ 01 Ноября 2013, 22:41:58
от Axiomateria

0 Пользователей и 2 Гостей просматривают эту тему.

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Цитировать
попробуйте посмотреть, что возвращает вашсайт.ru/udata/catalog/getList/(11,12,12) если в /catalog/_custom

результат:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="catalog" method="getList" generation-time="0.032455">
<lines/>
</udata>

*

Iolanta

  • *
  • 13
  • +2/-0
    • Просмотр профиля
хмм, может выборку упростить? замените
     //Создаем и подготавливаем выборку
      $sel = new umiSelection;
      $sel->addElementType($hierarchyTypeId); //Добавляет поиск по иерархическому типу
      $sel->addHierarchyFilter(0); //Устанавливаем поиск по разделу 0 - ищем от корня
      $sel->addPermissions(); //Говорим, что обязательно нужно учитывать права доступа
      //Получаем результаты
на
      $sel = new umiSelection;
      $sel->addElementType($hierarchyTypeId);
      $this->autoDetectFilters($sel,72);
вместо 72 подставьте, тот id типа данных объекта каталога, который у вас в шаблонах данных отвечает за вывод товара

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
результат такой же.

*

Iolanta

  • *
  • 13
  • +2/-0
    • Просмотр профиля
Не, ну надо было добить уже этот макрос)), поэтому я протестировала его у себя, он вполне себе правильно работает, а
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="catalog" method="getList" generation-time="0.032455">
<lines/>
</udata>
возвращает, когда вообще не находит среди объектов каталога, объекты, в поле "артикул" которых содержалось бы либо 10 либо 11 или 12 например. Так что продолжайте тестировать на разных вариантах $myStr, макрос рабочий.

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
тогда начнем с начала.
в Шаблоне данных : объект каталога - 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>

таки образом:) только сейчас, когда я вот так стала последовательно все прописывать сюда:) все заработало

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
осталось разобраться с правами доступа:) что бы не только мне показывались этьи товары но и не зарегистрированному пользователю....

*

Iolanta

  • *
  • 13
  • +2/-0
    • Просмотр профиля
О правах доступа у umi много статей, например, http://www.digitalart.by/articles/custom_macros/ 
Можно добавить проверку, чтобы в итоговый список не попадал объект каталога, на странице которого собственно и происходит вывод, во общем экспериментируйте)

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
данной статьей не удалось воспользоваться.
зато внеся в массив в файле classes/modules/catalog/permissions.custom.php
$permissions = array(
'view' => array('getList')
);