[mSearch2] Версия 0.6.2 - переключение чанков

В последнее время стало довольно модным менять представление каталога товаров, по желанию посетителя. То есть, дать ему кнопочки, чтобы сам выводил товары списком, таблицей или еще как-нибудь.

В техподдержке нашего магазина запросили такую фишку, и вуаля — теперь она есть в компоненте по умолчанию, с версии 0.6.2.

Параметр tpls

У сниппета mFilter2 появился новый необязательный параметр &tpls=``. В него вы можете указать список чанков, доступных для оформления товара.

Например:
[[!mFilter2?
	&parents=`2`
	&tpls=`tpl_default,tpl_table,tpl_list`
]]

При работе этот список разбивается на массив и можно указывать, какой чанк использовать, просто параметром url:
http://mysite.ru/filter.html?tpl=1
выведет товары, оформленные чанком tpl_table.

Если не указывать параметр tpl, или указать ?tpl=0, то будет использован чанк tpl_default. Если указать номер незаданного чанка, например 3, для нашего случая — то снова будет использован tpl_default.

Ошибку вызвать не получится, при любой нештатной ситуации используется чанк с индексом 0. Если же параметр &tpls=`` пуст, или не указан, но сниппет работает как и раньше.

Фронтенд

Для нормальной работы на фронтенде, я добавил обработку ссылок с селектором #mse2_tpl a в стандартный javascript. У этих ссылок должен быть параметр data-tpl=«индекс чанка в массиве указанных».

Для текущего чанка выставляется плейсхолдер со словом active, который я советую использовать в классе ccskrb. Заодно сниппет выставляет (или нет) плейсхолдер [[+tpls]] равный единице, чтобы можно было удобно скрывать или показывать блок выбора чанков.

Выходят вот такие ссылочки для переключения чанков:
[[+tpls:notempty=`
<div id="mse2_tpl">
	<a href="#" data-tpl="0" class="[[+tpl0]]">Вывод по умолчанию</a>
	<a href="#" data-tpl="1" class="[[+tpl1]]">Вывод таблицей</a>
	<a href="#" data-tpl="2" class="[[+tpl2]]">Вывод списком</a>
</div>
`]]

Все это уже включено в базовый функционал, вам нужно только указать параметр &tpls=`ваши чанки через запятую` и поправить чанк tpl.mFilter2.outer, добавив ссылки для переключения.

Заключение

Конечно, все прекрасно работает через ajax и сохраняется при перезагрузке страницы.

Посмотреть в действии можно на демо-сайте miniShop2.

Пакет у нас в магазине.

Следующая заметка
[getPageExt] Неверный номер страницы
Предыдущая заметка
[Tickets] Версия 1.1.0 beta2 - Тикеты с ТВ


Комментарии ()

  1. Виктор Долгий 29 июля 2013, 11:44 # 0
    Работает, но:
    Error 23000 executing statement: INSERT INTO `modx_transport_packages` (`signature`, `created`, `state`, `workspace`, `provider`, `disabled`, `source`, `package_name`, `version_major`, `version_minor`, `version_patch`, `release`, `release_index`) VALUES ('pdotools-1.4.1-pl', '2013-07-29 10:42:08', 1, 1, 1, 0, 'pdotools-1.4.1-pl.transport.zip', 'pdotools', 1, 4, 1, 'pl', 0) Array ( [0] => 23000 [1] => 1062 [2] => Duplicate entry 'pdotools-1.4.1-pl' for key 'PRIMARY' ) 
    Could not save package pdoTools
    1. Володя 29 июля 2013, 11:49 # 0
      у меня все четко, без ошибок… может pdotools-1.4.1-pl переустановить?
      1. Виктор Долгий 29 июля 2013, 11:57 # 0
        Все работает ок, просто у меня уже была установлена версия pdoTools 1.4.1, а mSearch пытался обновить, в этом видимо и дело.
    2. Александр Котлов 29 июля 2013, 12:56 # 0
      Шикарно!
      1. Александр Котлов 11 августа 2013, 18:43 # 0
        Помогите победить.
        Дано — станица каталога, на ней блоки с товаром и переключатель список\таблица. По событию mouseover на блоке jQuery добавляет класс и показывается кнопка «Быстрый обзор». Проблема в том, что если переключить с tpl0 на tpl1 и обратно — кнопка показываться перестает. В консоли показывает что Event listener Для mouseover после переключения отсутствует. Есть идеи как победить?
        1. Александр Котлов 15 декабря 2013, 00:40 # 0
          Василий, расскажи пожалуйста чуть подробнее про работу переключения, в частности, что обрабатывается в чанках когда они подгружаются при переключении, а что нет. Обнаружил что при переключении на работает migX и сниппеты в чанках.
          1. Василий Наумкин 15 декабря 2013, 09:04 # 0
            А без переключения работает?

            Там просто указывается тот или иной чанк в вызове сниппета, разницы быть не должно.
            1. Александр Котлов 16 декабря 2013, 00:40 # 0
              Странно, оказалось что такой глюк имеет место быть в отдельных разделах, а в большинстве нормально работает. Значит я накосячил, буду разбираться.
              1. Александр Котлов 02 марта 2014, 18:57 # 0
                Василий, проверил сейчас старую проблему на чистой установке — осталась. Выражается в чем:

                есть tpl0, например

                <b>[[+price]]  [[!priceby?&price=`[[+price]]`]]</b>
                и tpl1 произвольного содержания.

                Для простоты priceby это просто

                return $price  * 2;


                Так вот если переключиться с tpl0 на tpl1 и обратно — то вывод priceby — исчезнет.

                Пробовал его возвращать через getChunk, вызывал кешируемым и нет — все равно: есть, переключили, нет.

                Все стандартные плесйсхолдеры минишопа остаются на местах. В чем тут беда может быть?
            Добавление новых комментариев отключено.