UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: manadsgn от 06 Июля 2012, 17:33:48

Название: Сортировка товаров каталога - по цене, названию, популярности
Отправлено: manadsgn от 06 Июля 2012, 17:33:48
Здравствуйте еще раз!
Работаю с интернет-магазином "Современный". Это мой первый опыт работы с XSL, поэтому много чего совсем непонятно.
На страницы со списками товаров нужно добавить сортировку по цене, названию, популярности. 
Например, нашла ответ, как делать сортировку по названию

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

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

И следующий вопрос, более важный - как сделать линки на данные виды сортировки?
Спасибо.
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 09 Июля 2012, 16:04:48
для того чтобы вывести ссылку на соритровку элементов каталога используется макрос %system order_by()% (http://help-dev.umi-cms.ru/system.order_by.html), если вам необходимо сортировка в обоих направлениях (А-Я,Я-А) то смотрите статью на wiki.umisoft Обновленный макрос system order by (двойная сортировка по одной ссылке) (http://wiki.umisoft.ru/%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81_system_order_by_%28%D0%B4%D0%B2%D0%BE%D0%B9%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D0%BE_%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B5%29)
Название: Re:Сортировка товаров каталога - по цене, назв
Отправлено: shoto от 18 Июля 2012, 13:49:54
Правильно ли я понимаю что для того что бы использовать сортировку в 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"
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 18 Июля 2012, 16:12:17
для xslt там нет одной мелочи, отметки о том что данный элемент является активным. сегодня выложу статью с примером и кодом для xslt
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: shoto от 18 Июля 2012, 16:31:48
жду с нетерпением!
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 20 Июля 2012, 03:05:03
Создание двухсторонней сортировки order_by, для xslt шаблонов (http://umihelp.ru/~/1719)
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: shoto от 23 Июля 2012, 12:30:46
я так понимаю что в представленном варианте сразу предлагается сортировка по возрастанию, а потом уже если она использовалась, то появляются ее обратные вариации. а как при этом вывести 2 раздельные ссылки сразу что бы  раздельно указать например "Артикул возр" "Артикул убыв"?
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 23 Июля 2012, 12:45:29
для этого, надо немного отредактировать код, постараюсь ко вторнику отписать
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: shoto от 24 Июля 2012, 08:43:56
Буду ждать:)
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: john от 21 Мая 2013, 11:53:43
Здравствуйте.
Можно по подробнее как использовать статью.
Код в custom.php добавил,
а остальной код куда правильно размещать, можно пример.
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 21 Мая 2013, 11:57:05
я правильно вас понимаю, что статьи не хватило?
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: john от 21 Мая 2013, 22:55:16
Да, правильно.
Код в 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>
Стрелочки появились на странице, при нажатие ничего не происходит.
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 22 Мая 2013, 09:42:50
для начала проверьте что макрос возвращает то, что вам надо @link и @direction

То есть, вместо <xsl:apply-templates select="document('udata://custom/order_by/price')" /> вставьте <xsl:copy-of select="document('udata://custom/order_by/price')" /> и посмотрите в исходном коде страницы это место где вы его вставили, там должен быть xml который вернул макрос.... так как кажется мне, что макрос мог не определить доминирующий тип данных и его возможно надо указать при вызове (в статье есть примеры как указать тип данных явно в параметрах вызова макроса)
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: john от 25 Мая 2013, 12:09:08
Вывел  
 Method custom::order_by doesn't exists 
не работает.
А кто-нибудь такой код применял и как? http://wiki.umisoft.ru/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8_XSLT
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 31 Мая 2013, 13:04:19
если  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, вы получете отдельную сортировку

Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: Axiomateria от 14 Октября 2014, 12:06:46
для того чтобы вывести ссылку на соритровку элементов каталога используется макрос %system order_by()% (http://help-dev.umi-cms.ru/system.order_by.html), если вам необходимо сортировка в обоих направлениях (А-Я,Я-А) то смотрите статью на wiki.umisoft Обновленный макрос system order by (двойная сортировка по одной ссылке) (http://wiki.umisoft.ru/%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81_system_order_by_%28%D0%B4%D0%B2%D0%BE%D0%B9%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D0%BE_%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B5%29)
К сожалению эта ссылка на wiki.umisoft на данный момент битая...
Однако полезная статья имеется в наличии по ссылке от admin : http://umihelp.ru/articles/custom_order_by-for_xslt/
в которой описывается варианты сортировки по полую цена (price)
<xsl:apply-templates select="document('udata://custom/order_by/price//11')" />

Вопрос: а как же всё-так по полю Название (namе) сортировать объекты каталога ?
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 14 Октября 2014, 12:12:04
попробуйте решение от admin ( Создание двухсторонней сортировки order_by для xslt шаблонов (http://umihelp.ru/articles/daniil_sirotkin/custom_order_by-for_xslt/)) вызвать так
<xsl:apply-templates select="document('udata://custom/order_by/name//11')" />
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: Axiomateria от 12 Ноября 2014, 01:46:25
попробуйте решение от admin (http://umihelp.ru/articles/custom_order_by-for_xslt/) вызвать так
<xsl:apply-templates select="document('udata://custom/order_by/name//11')" />
Спасибо! Этой статьёй уж неоднократно пользовался.

Правда сортировка происходит либо по цене либо по названию, то есть не получается отфильтровать сначала по цене, а потом ещё и по названию не сбросив результат фильтрации по цене.
Это потому что используются  <a href="{link}" class="direction{@direction}"> вместо <input> ?
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 12 Ноября 2014, 09:38:13
нет, это из-за того, что предыдущие сортировки сбрасываются на уровне самого макроса
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: Axiomateria от 26 Ноября 2014, 13:16:56
Сортировка не работает на страницах, где товары выводятся через usel.
Тот же самый сайт, те же самые товары, но разница их вывода на страницу не через
udata://catalog/getObjectsList/
а через
usel://sales/

В адресной строке всё так же добавляется /?&umi_authorization=&order_filter%5Bprice%5D=1
но ни чего не происходит...
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 26 Ноября 2014, 13:35:37
параметры в адресной строке вида fields_filter и order_filter автоматически учитываются при выводе товаров макросом getObjectsList, для usel необходимо подхватывать эти параметры из адресной строки и передавать как параметры при вызове
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: Axiomateria от 26 Ноября 2014, 13:43:05
для usel необходимо подхватывать эти параметры из адресной строки и передавать как параметры при вызове
а возможно ли с этого места поподробнее ? как мне кажется это подхватывание и передача в вызов...
в общем не понятно на каком хотя бы уровне кода это делать - PHP или USEL или XSLT...
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 26 Ноября 2014, 14:57:47
если у вас параметры в адресной строке простого вида, типа price_order = 1

1. нужно как-то подхватит параметр из адресной строки
2. в usel файле создать заготовку для таких параметров, например для сортировке по цене посредством инструкции в usel файле
<sort order="{2}">{1}</sort>

3. При вызове usel передать эти параметры например так
usel://sales/price/asc

Остается вопрос как подхватить параметры. Можно передавать в адресную строку параметры другого вида и тогда все просто. Если в адресной строке параметры вида
?field_name=price&order=asc
, то создав глобальные параметры с соответвующими названиями
<xsl:param name="field_name" select="''"/>
<xsl:param name="order" select="''"/>

можно передавать их в usel
concat('usel://sales/',$field_name,'/',$order)

При этом варианте надо только переделать ссылки для сортировки.

Либо можно подхватывать параметры кастомным макросом, а результаты этого макроса подставлять к usel вызову

А можно отказаться от usel и сделать вывод товаров "распрадажа" силами getcategorylist...
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: Axiomateria от 26 Ноября 2014, 15:49:20
А можно отказаться от usel и сделать вывод товаров "распрадажа" силами getcategorylist...
Вот у меня тоже такая мысль давно уже про это в голове с вопросом - как вызвать в таком случае udata://catalog/getCategoryList/notemplate/(market)/10  
, если объекты каталога в разделе выводятся по активному полю из типа данных "Распродажа" с идентификаторм "sales" (то есть галочку поставили и товар выводится в специальном разделе "Распродажа") через usel, то вот ума не приложу, как этот идентификатор подставить в вызов udata://catalog/getCategoryList/notemplate/(market)/10  
В переменную вогнать его ?

P.S. Спасибо за варианты про usel, чуть погодя попробую свершить.
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: webkonditer от 06 Февраля 2015, 18:00:26
Здравствуйте форумчане!
Меня тоже интересует вопрос сортировки. Есть необходимость, чтобы можно было отсортировать товар по названию, по цене и по бренду.
Статьи по ссылкам в этой ветке форума удалены.
Может ли кто-то подсказать, как мне организовать указанную сортировку.
Заранее благодарен!
Название: Re:Сортировка товаров каталога - по цене, названию, популярности
Отправлено: admin от 22 Марта 2015, 18:25:03
Здравствуйте форумчане!
Меня тоже интересует вопрос сортировки. Есть необходимость, чтобы можно было отсортировать товар по названию, по цене и по бренду.
Статьи по ссылкам в этой ветке форума удалены.
Может ли кто-то подсказать, как мне организовать указанную сортировку.
Заранее благодарен!

Статья была перенесена в связи с переделкой дизайна и иерархии. Смотрите её тут  Создание двухсторонней сортировки order_by для xslt шаблонов (http://umihelp.ru/articles/daniil_sirotkin/custom_order_by-for_xslt/)
Название: Re: Сортировка товаров каталога - по цене, названию, популярности
Отправлено: Axiomateria от 29 Декабря 2016, 19:17:07
попробуйте решение от admin ( Создание двухсторонней сортировки order_by для xslt шаблонов (http://umihelp.ru/articles/daniil_sirotkin/custom_order_by-for_xslt/)) вызвать так
<xsl:apply-templates select="document('udata://custom/order_by/name//11')" />
С сортировкой по имени понятно.

Вопрос следующий: а как сортировать объекты каталога по их дате добавления?
Пользуясь тем же методом, что и сортировка по цене я пытаюсь отсортировать в этом случае так :
<xsl:apply-templates select="document('udata://custom/order_by/date_create_object//86')"  mode="order_by_data" />
Но это не срабатывает...
Где ошибка ?