Compare
Дополнение Compare позволяет добавить на сайт функционал сравнения товаров MiniShop3 (MODX 3) по характеристикам.

Возможности компонента
Основые возможности компонента:
- Добавление кнопки (в виде ссылки или иконки) "Сравнить" на карточке товара, которая добавляет товар к сравнению.
- Поддержка нескольких списков сравнения, чтобы не сравнивать холодильники и телефоны.
- Добавление ссылки на сравнение в шапку сайта (по аналогии с мини-корзиной минишоп).
- Отдельная страница для сравнения товаров, где все характеристики выводятся таблицей.
- Подсветка "лучшей" характеристики, например, минимальной цены, максимальной мощности и т.п.
Особенность компонента
Для работы компонента вам не потребуется добавлять вызовы сниппетов на страницы сайта (кроме, собственно, страницы сравнения). Все, что нужно - это добавить html разметку, что позитивно сказывается на скорости работы сайта. Данные для работы компонента подгружаются отдельным запросом в момент отображения страницы на клиенте.
Интеграция на сайт
Важно: стандартные чанки и css файл адаптированы для Bootstrap 5. Если Вы его не используете у себя на сайте — вероятно придется скорректировать html и стили для адаптации.
Шаг 1. Добавьте на страницы сайта скрипты и стили компонента:
<!-- css, добавляем в секцию <head> -->
<link rel="stylesheet" href="/assets/components/compare/css/compare.css">
<!-- js, внизу страницы, перед закрывающимся </body> -->
<script src="/assets/components/compare/js/compare.js" defer></script>Шаг 2. Добавьте у товара кнопку для добавления в сравнение.
Вы можете использовать стандартный чанк tpl.Compare.Button или создать свой, основываясь на примерах ниже.
В указанных примерах вам нужно заполнить атрибут data-id (id товара), при необходимости можете указать data-list (название списка сравнения). Проверьте, что используете [[*id]] на карточке товара и [[+id]] в списке товаров.
Пример #1, просто иконка:
<div class="compare compare--load" compare-root data-id="[[*id]]" data-list="default">
<button class="compare__button" aria-label="Добавить в сравнение">
<svg width="17" height="18" viewBox="0 0 17 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect y="8" width="3" height="10" fill="#A6A6A6"/>
<rect x="7" width="3" height="18" fill="#A6A6A6"/>
<rect x="14" y="4" width="3" height="14" fill="#A6A6A6"/>
</svg>
</button>
</div>Пример #2, с текстом:
<div class="compare compare--load" compare-root data-id="[[*id]]" data-list="default">
<button class="compare__button" type="button" aria-label="Добавить в сравнение">
<svg width="17" height="18" viewBox="0 0 17 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect y="8" width="2" height="10" fill="#125190"></rect>
<rect x="7" width="2" height="18" fill="#125190"></rect>
<rect x="14" y="4" width="2" height="14" fill="#125190"></rect>
</svg>
<span class="compare__button-text" data-add="В сравнение" data-remove="В сравнении">В сравнение</span>
</button>
<a href="/compare?list=default" class="compare__go">Сравнить (<span class="compare__count"></span>)</a>
</div>Обратите внимание на классы и аттрибуты, начинающиеся с compare, они обязательны для корректной работы компонента.
Шаг 3. Создайте страницу /compare, где будет вызов сниппета [[!Compare]]:
[[!Compare?
&fields=`price,vendor_id,size,color,weight,made_in,option_1,option_2`
&best=`price:min`
&list=`default`
&tpl=`tpl.Compare.Page`
]]Описание параметров сниппета:
fields— список полей товара и опций (option_1, ...) для сравнения.best— список полей, для которых подсветить лучшие (min или max) значения (только числовые), например, минимальная цена.list— список сравнения, по умолчанию default. Используйте разные списки, чтобы не сравнивать холодильники с телефонами. Используйте только латинские буквы и цифры.tpl— шаблон с html разметкой.
Шаг 4. Добавьте в шапку сайта ссылку на страницу сравнения (по аналогии с мини-корзиной miniShop2):
<a href="/compare" class="compare-mini">
Сравнить <i class="compare-mini__count"></i>
</a>Здесь будет отображаться кол-во товаров в сравнении.
Когда в сравнении будут товары, то к ссылке добавится класс compare-mini--active, что позволит управлять её внешним видом (или видимостью).
Заключение
Обсуждение компонента, вопросы автору задавайте на сайте https://modx.pro или в поддержке https://modstore.pro (для купленных дополнений).
