Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Как вывести itemprop="position" content="" в XSLT?

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

Ответов: 0
Просмотров: 1612
Последний ответ 15 Ноября 2018, 09:30:06
от makarov2979
Изменение вывода list-position (TPL)

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

Ответов: 1
Просмотров: 1857
Последний ответ 29 Сентября 2012, 18:44:15
от technoexpert
Группировка item в выборке?

Автор muldyРаздел Custom макросы

Ответов: 4
Просмотров: 2498
Последний ответ 16 Января 2014, 11:42:46
от muldy

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

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Position в выборке
« Ответ #15 : 21 Мая 2013, 14:49:26 »
может уже ну его, через макрос menu, может через usel попробовать? там при выборке сразу можно будет поставить проверку на это поле bottom_menu

P.S. Кстати, этот то вариант работает?

Не сторонник использовать usel там, где можно обойтись стандартными udata :)

Именно для этого случая я бы использовал следующий код:

<xsl:apply-templates select="document('udata://content/menu/?extProps=bottom_menu')/udata" mode="bottom_menu" />

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

<xsl:template match="udata[@method = 'menu'][items/item]" mode="bottom_menu">
<ul>
<xsl:apply-templates select="items/item" mode="bottom_menu" />
</u>
</xsl:template>

<xsl:template match="item" mode="bottom_menu" />

<xsl:template match="item[extended//property[@name = 'bottom_menu']/value]" mode="bottom_menu">
<li>
<xsl:apply-templates select="." mode="additional-class" />
<a href="{@link}" ><xsl:value-of select="." /></a>
</li>
</xsl:template>

<xsl:template match="item" mode="additional-class" />

<xsl:template match="item[first()]" mode="additional-class">
<xsl:attribute name="class">first</xsl:attribute>
</xsl:template>

Во-первых, при вызове content/menu указываем, что нам нужно дополнительно получить параметр bottom_menu. Затем фильтруем в зависимости от того, есть ли у элемента этот параметр или нет.

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

Как-то так :)
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Position в выборке
« Ответ #16 : 21 Мая 2013, 14:50:41 »
Да, забыл дописать проверку, есть ли вообще в выборке элементы интересные нам. Вместо

<xsl:template match="udata[@method = 'menu'][items/item]" mode="bottom_menu">

нужно указать

<xsl:template match="udata[@method = 'menu'][items/item[extended//property[@name = 'bottom_menu']/value]]" mode="bottom_menu">
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

Babajka

  • *
  • 42
  • +0/-0
    • Просмотр профиля
Re:Position в выборке
« Ответ #17 : 21 Мая 2013, 17:22:25 »
e.ioffe
У меня не держит extProps. Так что не подходит.

admin
Через usel она изначально была сделана, пытался отойти от этого. Но судя по всему придется обратно вернуться.
Но за варианты еще буду благодарен. )

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Position в выборке
« Ответ #18 : 21 Мая 2013, 17:55:46 »
Жаль. А можно адрес сайта в личку? Может, что-то еще в голову придет.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Position в выборке
« Ответ #19 : 22 Мая 2013, 09:37:29 »
Не сторонник использовать usel там, где можно обойтись стандартными udata :)

Именно для этого случая я бы использовал следующий код:

уже пробовали этот вариант смотрите сообщения выше, версия не позволяет.

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Position в выборке
« Ответ #20 : 22 Мая 2013, 12:51:53 »
уже пробовали этот вариант смотрите сообщения выше, версия не позволяет.

Ага, видел.

Тогда попробуйте так:

<xsl:template match="item" mode="bottom_menu">
<xsl:apply-templates select="document(concat('upage://', @id, '.bottom_menu'))//value" mode="select_bottom_menu">
<xsl:with-param name="item" select="." />
</xsl:apply-templates>
</xsl:template>

<xsl:template match="value" mode="select_bottom_menu">
<xsl:param name="item" />

<li>
<xsl:if test="first()"><xsl:attribute name="class">first</xsl:attribute></xsl:if>
<a href="{$item/@link}"><xsl:value-of select="$item" /></a>
</li>
</xsl:template>

Основная мысль:
если мы проверяем item используя <xsl:if test="$test !=0">, то в дальнейшем мы не можем проверить position, так как он будет равен position данного item в items без учета if-a.

Грубо говоря:
1-й элемент - не подходит
2-й элемент - не подходит
3-й элемент - подходит, однако его position для шаблона будет 3, а не 1.

Мне кажется, что если использовать <xsl:apply-templates select="document(concat('upage://', @id, '.bottom_menu'))//value" mode="select_bottom_menu">
      <xsl:with-param name="item" select="." />
   </xsl:apply-templates>
, то position будет рассчитываться только для тех элементов, у которых есть value (остальные отбрасываются на уровне условия).

Возможно, что это не так - под рукой нет тестовой базы, не могу проверить.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

Babajka

  • *
  • 42
  • +0/-0
    • Просмотр профиля
Re:Position в выборке
« Ответ #21 : 22 Мая 2013, 14:31:26 »
e.ioffe
Именно на этот пример, он выругался на "umiTemplaterXSLT.php on line 50". И не выдал мне меню. Вот.
Но для моего понимания код оказался, как то замудрен, по этому мыслей по его "доработке" не нашел.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Position в выборке
« Ответ #22 : 22 Мая 2013, 15:14:32 »
в общем в итоге у нас рабочий вариант с usel (если я правильно понял Babajka), Вариант с extProps (очень хороший но версия umi не позволяет им воспользоваться) и пляски с xslt чтобы делая доп запросы через upage выводить нужный нам список.

Может, разумнее уже написать свой экономичный кастом, который будет выводить то что надо)