Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

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

*

arbuzzz

  • **
  • 80
  • +1/-0
    • Просмотр профиля
На сайте организованно левое меню, состоящее из категорий, с помощью шаблона
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="left-column">
...
</xsl:template>

У объекта "раздел каталога" я добавил чекбокс "Не выводить в списке категорий" с именем left_menu_show

Подскажите, как модифицировать вызов метода, что бы в него попадали только те категории у которых это чекбокс не отмечен.

Пробовал
<xsl:template match="udata[@method = 'getCategoryList']//item[i][@left_menu_show = 0][/i]" mode="left-column">
...
</xsl:template>

не работает.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Вывод только отмеченных категорий.
« Ответ #1 : 16 Марта 2013, 02:26:28 »
если вы хотите убирать категории, отмеченные галочкой "Не выводить в списке категорий", средствами xslt, то вам необходимо иметь в xsml который возвращает макрос getCategoryList эту информацию? так как макрос не возвращает эту информацию в дефолтном режиме см. информацию о данном макросе на вкладке "xslt шаблонизатор", то у нас остается возможность только добавить информацию об этом поле послерством нового функционала ?extProps

1. Например сделать вызов вида
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList //333///?extProps=left_menu_show'))/udata" mode="hide_item_list"/>

тогда при обработке данного вызова шаблонами вида

<xsl:template match="udata[@method = 'getCategoryList ']" mode="hide_item_list"/>

<xsl:template match="udata[@method = 'getCategoryList' and items/item]" mode="hide_item_list">
<xsl:apply-templates select="items/item" mode="hide_item_list">
</xsl:template>

<xsl:template match="items/item" mode="hide_item_list">
<a href="{@link}"><xsl:value-of select="text()" /></a>
</xsl:template>

<!--уточняющий шаблон, который, фактически, выводит пустоту, когда обнаруживает внутри item узла, узел property с атрибутом name = 'left_menu_show' и при этом имеющего дочерний учел value со значением 1 -->
<xsl:template match="items/item[//property[@name='left_menu_show']/value=1]" mode="hide_item_list" />

2. с другой стороны, мы можем сделать кастом на основе макроса catalog getCategoryList() ,добавив в него проверку на наличие данной галочки и исключать информацию о таких подразделах в результате, который будет возвращать наш кастом. Что соответвенно исключит данные подразделы из xml, который будет формироваться нашим кастомом.

3. Еще, мы можем написать usel запрос. В котором, мы укажем что хотим получить все разделы каталога, дочерние к определенной странице в структуре сайта и не имеющие проставленной галочки.

P.S. Первый вариант самый простой, если у вас не возникнет сложностей с адаптацией его для вашей xslt структуры. Если же всетаки возникнет, то тут уже вам сможет помощь, только повышение уровня понимания xslt .

Второй вариант, минимизирует лишние функции. Так как, в первом случае сайт все равно будет обрабатывать категории, которые выводить не надо, но будет их прятать, а вот наш кастом будет исключать их еще на уровне php подготовки xml кода.

Третий вариант фактически чемпион, так как он исключает лишние категории на уровне sql запроса который он сформирует на основе usel файла. При этом, данный способ не вынуждает вас погружаться в php код, а всего лишь предлагает вам воспользоваться упрощенным синтоксисом на котором пишеться что вам нужно, описанный в документации как "протокол Usel"

*

arbuzzz

  • **
  • 80
  • +1/-0
    • Просмотр профиля
Re:Вывод только отмеченных категорий.
« Ответ #2 : 18 Марта 2013, 14:20:22 »
Спасибо. Про кастом сам не догадался. Реализовал через него. Сделал дополнительно передачу двух параметров "Имя поля" и "Значение" при получении макросом значений дополняются условия выборки.