UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: arbuzzz от 03 Апреля 2013, 16:47:38

Название: Вопрос по сортировке
Отправлено: arbuzzz от 03 Апреля 2013, 16:47:38
Вопрос наверное глупый, но я только недавно начал осваивать xslt.
Есть вызов шаблона для показа элементов каталога, в котором я указываю сортировку по цене, но сортировка почему-то упорно не работает  :'(
<xsl:apply-templates select="//lines/item" mode="short-view">
<xsl:sort order="ascending" select="//property[@name='price']/value" />
<xsl:with-param name="cart_items" select="document('udata://emarket/cart/')/udata/items" />
<xsl:with-param name="main_page" select="1" />
<xsl:with-param name="showdesc" select="true()" />
</xsl:apply-templates>
Название: Re:Вопрос по сортировке
Отправлено: admin от 04 Апреля 2013, 07:59:35
для того чтобы у вас работа сортировка, вам необходимо что информация о цене была в xml который вы вызвали макросом, для этого вам скорее всего подойдет ?extProps параметр (см в документации Получение расширенных полей и групп (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/makrosy_protokol_udata/#extended)) или похожая задача (http://umihelp.ru/forum/index.php/topic,1479.msg5905.html#msg5905), обсуждаемая на форуме,  которая использовала для фильтрации дополнительное поле при вызове макроса content menu()

И скорее всего вам необходимо будет немного поправить свой шаблон, добавив точку перед //property:
<xsl:sort order="ascending" select=".//property[@name='price']/value" />
Название: Re:Вопрос по сортировке
Отправлено: arbuzzz от 04 Апреля 2013, 10:00:13
Спасибо за наводку. ?extProps использовать не могу - система 2.4.4 без возможности обновления. Буду думать... Наверное сам просто что-то подобное допишу, все равно уже системные файлы исправлены...
Название: Re:Вопрос по сортировке
Отправлено: arbuzzz от 04 Апреля 2013, 10:52:42
Решил без костылей. Просто немного усложнил вытащив цену.

<xsl:sort order="descending" select="document(concat('upage://',@id))//property[@name = 'price']/value" data-type="number"/>

Для того что бы сортировалось как число, а не как строка, передан параметр
data-type="number"
Название: Re:Вопрос по сортировке
Отправлено: admin от 04 Апреля 2013, 11:24:42
отличный вариант, по экономичности ресурсов не сильно хорош, но зато быстр и мобилен в реализации.

Если нужно будет сделать более бережливый к ресурсам вариант, то сделайте копию макроса %catalog getObjectsList()% и добавить там вывод цены

$line_arr = Array();
$line_arr['attribute:id'] = $element_id;
$line_arr['attribute:alt_name'] = $element->getAltName();
$line_arr['attribute:price'] = $element->getValue('price');
$line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($element_id);
$line_arr['xlink:href'] = "upage://" . $element_id;
$line_arr['node:text'] = $element->getName();