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

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

*

manadsgn

  • *
  • 30
  • +0/-0
    • Просмотр профиля
Здравствуйте еще раз!
Работаю с интернет-магазином "Современный". Это мой первый опыт работы с XSL, поэтому много чего совсем непонятно.
На страницы со списками товаров нужно добавить сортировку по цене, названию, популярности. 
Например, нашла ответ, как делать сортировку по названию

 <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/h1/1'))/udata" />

То есть по аналогии можно сделать сортировку по цене и по id товара, вопрос - как делается сортировка по популярности?

И следующий вопрос, более важный - как сделать линки на данные виды сортировки?
Спасибо.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
для того чтобы вывести ссылку на соритровку элементов каталога используется макрос %system order_by()%, если вам необходимо сортировка в обоих направлениях (А-Я,Я-А) то смотрите статью на wiki.umisoft Обновленный макрос system order by (двойная сортировка по одной ссылке)

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Правильно ли я понимаю что для того что бы использовать сортировку в 2-х направлениях, я использую представленный кастом, и делаю вызов вида:
<xsl:apply-templates select="document('udata://custom/order_by_new/artikul/72')" mode="art_sort"/>
проверяю, получаю:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="custom" method="order_by_new" generation-time="0.008648">
<link>?&amp;scheme=udata&amp;order_filter[artikul]=1</link>
<title>Артикул</title>
</udata>
и как мне выводить вторую ссылку для сортировки в обратную сторону?
точнее, этот кастом вообще можно ли использовать для xslt? а то там упоминания о tpl-шаблонах идет: "tpls/numpages/{$template}.tpl"
« Последнее редактирование: 18 Июля 2012, 14:55:42 от shoto »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
для xslt там нет одной мелочи, отметки о том что данный элемент является активным. сегодня выложу статью с примером и кодом для xslt

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
жду с нетерпением!

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
я так понимаю что в представленном варианте сразу предлагается сортировка по возрастанию, а потом уже если она использовалась, то появляются ее обратные вариации. а как при этом вывести 2 раздельные ссылки сразу что бы  раздельно указать например "Артикул возр" "Артикул убыв"?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
для этого, надо немного отредактировать код, постараюсь ко вторнику отписать

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля

*

john

  • ***
  • 207
  • +6/-0
    • Просмотр профиля
Здравствуйте.
Можно по подробнее как использовать статью.
Код в custom.php добавил,
а остальной код куда правильно размещать, можно пример.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
я правильно вас понимаю, что статьи не хватило?

*

john

  • ***
  • 207
  • +6/-0
    • Просмотр профиля
Да, правильно.
Код в custom.php добавил, далее в файл /xsltTpls/modules/catalog/category-view.xsl добавил код

	<xsl:template match="/result[@method = 'category']">
<xsl:apply-templates select="document(concat('usel://special-category-offers/', $document-page-id, '?limit=&specials-limit;'))" mode="special-offers" />
</xsl:template>

<xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 1]">

<xsl:apply-templates select="document('udata://custom/order_by/price')" />

<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/'))/udata" />
</xsl:template>

<xsl:template match="udata[@module='custom' and @method = 'order_by']">
    <a href="{link}" class="direction{@direction}">↓↑<xsl:value-of select="title" /></a>
</xsl:template>
Стрелочки появились на странице, при нажатие ничего не происходит.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
для начала проверьте что макрос возвращает то, что вам надо @link и @direction

То есть, вместо <xsl:apply-templates select="document('udata://custom/order_by/price')" /> вставьте <xsl:copy-of select="document('udata://custom/order_by/price')" /> и посмотрите в исходном коде страницы это место где вы его вставили, там должен быть xml который вернул макрос.... так как кажется мне, что макрос мог не определить доминирующий тип данных и его возможно надо указать при вызове (в статье есть примеры как указать тип данных явно в параметрах вызова макроса)

*

john

  • ***
  • 207
  • +6/-0
    • Просмотр профиля
« Последнее редактирование: 25 Мая 2013, 12:12:01 от john »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
если  Method custom::order_by doesn't exists  пишет, значит он написан не так или не там.
Вы написали что вставили код в custom.php. И тутже, первый вопрос, эта вставка была сделана в  /classes/modules/custom.php  или в  /templates/название_шаблона/classes/modules/custom.php?

Статья на вики рассказывает о сортировке средствами xslt списка элементов справочника, подразумевая что у вас в xml, который вы сортируете, содержит все элементы справочника. Если вы попробуете средствами xslt сортировать список товаров, то будете сортировать товары с 1 по 20, а при переходе на страницу, на которой выводятся товары с 21 по 40, вы получете отдельную сортировку