Сравнение товаров

Сравнение товаров по параметрам. ID товаров для сравнения сохраняются а куках. Можно использовать также для "Избранного".

Сниппет платный.

MODX Shopkeeper сравнение товаров

Установка

  1. В системе управления перейти "Элементы" -> "Управление элементами" -> "Сниппеты" -> "Новый сниппет".
  2. Название сниппета: compare
    Описание: Сравнение товаров
    В поле "Код сниппета (php)" вставить код из файла /docs/compare_snippet.txt.
  3. Сохранить.

Параметры

dataType - Тип товаров (документы или из каталога Shopkeeper). documents | products. По умолчанию - documents.

action - Действие.
Возможные значения:
to_compare - вывод строки со ссылкой на страницу сравнения;
print_id_list - список ID товаров, выбранных для сравнения (через запятую);
print_products - вывод таблицы параметров товаров (сравнение);
print_parent_id - вывод ID категории, товары которой выбраны.
По умолчанию - to_compare.

toCompare_tpl - Шаблон вывода строки со ссылкой на страницу сравнения и числом выбранных товаров.

product_tpl - Шаблон вывода таблицы параметров товаров (сравнение). Пример: /chunks/compare_product.tpl

limitProducts - Максимальное число товаров для сравнения. По умолчанию - 0 (без ограничения).

comparePageId - ID страницы сравнения.

onlyThisParentId - ID категории (документа), в которой можно добавить товары к сравнению. Запрет сравнения товаров из разных категорий. По умолчанию - 0 (любая категория).

filterTVID - TV ID через запятую, которые не нужно выводить в таблице параметров. Можно указать для каждого раздела отдельно (первый - по умолчанию).
ID категории 1~TV ID 1, TV ID 2...||ID категории 2~TV ID 1, TV ID 2...||...
Пример: &filterTVID=`5~1,2,5||6~4,2||7~5,1`
или без категорий: &filterTVID=`1,2,5`

removeLastTwo - Если сравниваются только два товара, при удалении одного удалять оба (т.к. сравнивать будет нечего). 1 - включить (по умолчанию), 0 - выключить.

Пример toCompare_tpl:

  1. <p>
  2. Выбрано <span id="skolko_vibrano">[+count_current+]</span> из [+count_max+]
  3. / <a href="[+href_compare+]" onclick="return shkCompare.toCompareLink();">сравнить</a>
  4. <span id="sravnenie_otmena" style="display:[+display_cancel+];"> / <a href="[+href_cancel+]">отменить</a></span>
  5. </p>
  6. <br clear="all" />
  7. </p>

Шаблон таблицы параметров товаров для сравнения

См. пример /chunks/compare_product.tpl
Шаблон разделен на 7 частей (разделитель <!--tpl_separator-->).

1 - верхняя часть;

2 - строка одного параметра.
[+inner+] - ячейки таблицы с данными,
[+classes+] - CSS-классы для строки таблицы: even - четная строка, odd - нечетная строка, last - последняя строка.

3 - первая ячейка верхнего ряда.

4 - ячейки верхнего ряда таблицы. Например можно вывести названия товаров и фото.
Плейсхолдеры - любые поля и имена TV;
[+iteration+] - порядковый номер товара в списке (колонки),
[+classes+] - CSS-классы для ячейки таблицы: even - четная колонка, odd - нечетная колонка, last - последняя колока.

5 - ячейка с названием параметра (название берется из поля "Заголовок" в свойствах TV).
[+param_name+] - наименование (заголовок) параметра,
[+row_number+] - номер строки таблицы.

6 - ячейка со значением параметра.
[+param_name+] - наименование параметра,
[+tv_name+] - имя TV,
[+param_value+] - значение параметра,
[+iteration+] - порядковый номер товара в списке,
[+row_number+] - номер строки таблицы,
[+classes+] - CSS-классы для ячейки таблицы: even - четная колонка, odd - нечетная колонка, first - первая колонка, last - последняя колока.

7 - нижняя часть.

Примеры вызова

На странице каталога:
[!compare?
&comparePageId=`15`
&limitProducts=`4`
&onlyThisParentId=`[*id*]`
!]
Страница сравнения:
[!compare?
&action=`print_products`
&product_tpl=`@FILE:assets/snippets/compare/chunks/compare_product.tpl`
&filterTVID=`4,16`
!]
Избранное:
[!catalogView?
&dataType=`documents`
&products=`[!compare?action=`print_id_list`&removeLastTwo=`0`!]`
&tpl=`shopStuff7`
!]
Вывод названия категории, выбранных для сравнения, товаров:
<h2>[!GetField?docid=`[!compare?action=`print_parent_id`!]`&field=`pagetitle`!]</h2>
Пример чекбокса, который добавляет товары к сравнению:
<input type="checkbox" name="compare" id="compare[+id+]" value="1" onclick="return shkCompare.toCompare([+id+],[+parent+],this)" [+id:compare=`checked="checked"`+] />
<label for="compare[+id+]">Сравнить</label>

PHX-модификатор compare

Для отметки товаров, которые выбраны к сравнению можно использовать PHx-модификатор "compare" (поместить compare.phx.php в папку assets/plugins/phx/modifiers/).
Примеры использования:

  1. <div class="product [+id:compare=`active`+]">...
  2. <input type="checkbox" name="compare" id="compare[+id+]" value="1" onclick="return shkCompare.toCompare([+id+],[+parent+],this)" [+id:compare=`checked="checked"`+] />
    <label for="compare[+id+]">Сравнить</label>
    

JavaScript-функции, которые вызываются при определенных событиях

cmpOnToCompareLinkMinimum - если кликнули по ссылке "Сравнить", но выбран только один товар или ни одного (можно вывести сообщение);
cmpOnToCompareCheckClicked(id,parent,checkbox) - клик по чекбоксу "сравнить";
cmpOnToCompareLimitReached(limit) - выбрано максимальное число товаров для сравнение (можно вывести сообщение);
cmpOnToCompareFromAnotherCategory - если добавляется товар из другой категории (можно вывести сообщение).

Просто создайте функцию с таким именем и она будет вызвана при соответствующем событии.
Пример:

  1. <script type="text/javascript">
  2. function cmpOnToCompareLinkMinimum(){
  3. alert("Для сравнения необходимо выбрать минимум 2 товара.\n Пожалуйста, выберите товар для сравнения.");
  4. }
  5. </script>