UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: 31rus от 20 Августа 2015, 22:26:28

Название: Требуется вывести каталог с разным оформлением
Отправлено: 31rus от 20 Августа 2015, 22:26:28
Требуется вывести с разным оформлением предпоследнюю и последнюю категорию каталога на основе demodizzy.
Возможно это реализовать только средствами XSLT?

Смысл, если это не предпоследняя или последняя, то только названия, а если предпоследняя то вывести по 5 товаров из всех вложенных в нее последних категорий, а если последняя то просто все товары. Сломал голову уже всю, считаю по родителям (<xsl:template match="/result[@method = 'category'][count(/result/parents/page) &gt; 1]">), но не везде одинаковое количество уровней вложенности(

Первая
 Вторая
  Предпоследняя
   Последняя категория
     |
    ├─ товар
    └─ товар
   Последняя категория
     |
    ├─ товар
    └─ товар
Первая
  Предпоследняя
   Последняя категория
    |
   ├─ товар
   └─ товар

Заранее спасибо всем!
Название: Re: Требуется вывести каталог с разным оформлением
Отправлено: 31rus от 23 Августа 2015, 17:19:10
Не кто не может помочь или я не понятно описал ситуацию?(
Как создать условие, что если это последная по уровню вложенности страница соответствующая разделу каталога (@method = 'category'), то вывести ее по определенному моду?
Название: Re: Требуется вывести каталог с разным оформлением
Отправлено: e.ioffe от 25 Августа 2015, 12:36:43
Если коротко, то

<xsl:apply-templates select="document('udata://catalog/getObjectsList/')/udata" mode="check-category" />

<xsl:template match="udata" mode="check-category">
  <p>В категории нет товаров</p>
</xsl:template>

<xsl:template match="udata[lines/item]" mode="check-category">
  <p>В категории есть товары</p>
</xsl:template>
Название: Re: Требуется вывести каталог с разным оформлением
Отправлено: 31rus от 25 Августа 2015, 12:41:17
Нет это не то, это вывод объектов и разделов, а мне нужно выводить на предпоследней страницы в каждом подразделе по 4 товара из всех
дочерних разделов, а на последнем все товары из него.

Ест вариант для страниц в структуре проставить свой шалон, но это крайний случай
Название: Re: Требуется вывести каталог с разным оформлением
Отправлено: e.ioffe от 25 Августа 2015, 12:52:32
В лоб:
писать свой кастом, который будет проверять, является ли данный раздел предпоследним.

С заботой о производительности:
написать обработчик события, который при сохранении / изменении / удалении / перемещении раздела каталога будет проверять, является ли он предпоследним. Если да - ставит в поле сохраняет значение 1. В шаблонах проверять - если в поле "1", то показывать по 4 товара из дочерних.
Название: Re: Требуется вывести каталог с разным оформлением
Отправлено: 31rus от 25 Августа 2015, 18:37:30
Я думал про кастом, но хотелось бы средствами xsl сделать. А какие есть идеи по повод кастома? Selector но не понятно как отсортировать тогда все дочерние объекты, он же выведет с предпоследней все последние, limit не решает данную задачу(
Название: Re: Требуется вывести каталог с разным оформлением
Отправлено: e.ioffe от 28 Августа 2015, 23:02:29
Цитировать
Selector но не понятно как отсортировать тогда все дочерние объекты, он же выведет с предпоследней все последние, limit не решает данную задачу(

Если совсем "в лоб", то

$sel = new selector('pages');
$sel->types('hierarchy-type')->name('catalog', 'category');
$sel->where('hierarchy')->page($pageId)->childs(1);
$sel->where('is_active')->equals(1);

foreach($sel as $element) {
  $objectsSel = new selector('pages');
  $objectsSel->types('hierarchy-type')->name('catalog', 'object');
  $objectsSel->where('hierarchy')->page($element->getId())->childs(1);
  $objectsSel->where('is_active')->equals(1);
}

Но я бы выносил все это в событие добавления / изменения / удаления элемента.
Название: Re: Требуется вывести каталог с разным оформлением
Отправлено: 31rus от 05 Сентября 2015, 20:55:03
Мне подсказали как, вот вывод custom

 public function getchild($id)
     {
         $hierarchyTypes = umiHierarchyTypesCollection::getInstance();
$hierarchyTypeId = $hierarchyTypes->getTypeByName("catalog", "category")->getId();
$arr = umiHierarchy::getInstance()->getChilds($id,true,true,2,$hierarchyTypeId);
if(empty($arr)){ return 'last'; exit();}
else {
    $arr1 = umiHierarchy::getInstance()->getChilds($id,true,true,1,$hierarchyTypeId);
    if($arr1 == $arr){ return 'pre-last'; exit();}
    else return ''; exit();
}
     }

позволит вам вывести разные уровни вложенности каталога, по разным шаблонам.
Название: Re: Требуется вывести каталог с разным оформлением
Отправлено: admin от 01 Января 2016, 06:07:15
Требуется вывести с разным оформлением предпоследнюю и последнюю категорию каталога на основе demodizzy.
Возможно это реализовать только средствами XSLT?

Удобнее кастомом (как вариант тот, что вы привели выше).
Но если говорить на уровне xslt, то получается затратно, так как вам придется делать такую логику:
- в шаблоне? который выводит раздел делаем следующие проверки:
   - вызываем макрос catalog/getCategorylist, если есть подразделы, то проверяем подразделы у первого подраздела из текущего результата
   - проверяем сколько уровней вглубь у нас получилось и в зависимости от этого
   - выводим название раздела, или список товаров, или список 5 товаров из каждого подраздела

Как вы видите, сделать это одним запросом на уровне кастома будет намного более верно, в плане нагрузки и быстродействия.