Skip to content
  1. Компоненты
  2. Compare для MODX 3 - Документация

Compare ​

Compare — это компонент для сравнения товаров MiniShop3 (MODX 3) по характеристикам.

Compare пример работы

Возможности компонента ​

Возможности компонента:

  • Сравнение товаров MiniShop3 по основным характеристикам (поля ресурса, опции miniShop3, цена, производитель и т.д.)
  • Поддержка нескольких списков сравнения (например, Смартфоны и Холодильники)
  • Хранение списков сравнения в сессии пользователя (для простых магазинов) или в базе данных (для более технически сложных магазинов)
  • Добавление ссылки на сравнение в шапку сайта (по аналогии с мини-корзиной минишоп) с подсветкой кол-ва товаров в сравнении.
  • Отдельная страница для сравнения товаров, где все характеристики выводятся сводной таблицей.
  • Подсветка "лучшей" характеристики, например, минимальной цены, максимальной мощности и т.п.
  • Простая интеграция на сайт, минимальная нагрузка на фронт, чтобы скорость работы вашего сайта оставалась на высоком уровне

Особенность компонента ​

Для работы компонента вам не потребуется добавлять вызовы сниппетов на страницы сайта (кроме, собственно, страницы сравнения). Все, что нужно - это добавить html разметку, что позитивно сказывается на скорости работы сайта. Данные для работы компонента подгружаются отдельным запросом в момент отображения страницы на клиенте.

Интеграция на сайт ​

Важно: стандартные чанки и css файл адаптированы для Bootstrap 5. Если Вы его не используете у себя на сайте, то, вероятно, придется скорректировать html код и css стили для адаптации.

Шаг 1. Добавьте на страницы сайта скрипты и стили компонента:

html
<!-- 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, просто иконка:

html
<div class="compare compare--load" compare-root data-id="[[*id]]" data-list="Товары">
    <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, с текстом:

html
<div class="compare compare--load" compare-root data-id="[[*id]]" data-list="Товары">
    <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`
    &priceFields=`price,old_price`
    &weightFields=`weight`
    &best=`price:min`
    &list=`default`
    &tpl=`tpl.Compare.Page`
]]

Описание параметров сниппета:

  • fields - список полей товара и опций (option_1, ...) для сравнения.
  • priceFields - поля с ценой, по умолчанию price,old_price. Значения будут отформатированы с символом валюты.
  • weightFields - поля с весом, по умолчанию weight. Значения будут отформатированы с единицами измерения.
  • best - список полей, для которых подсветить лучшие (min или max) значения (только числовые), например, для минимальной цены и максимальной мощности это price:min,power:max.
  • list - список сравнения, по-умолчанию пустое значение, отображается как Товары. Используйте разные списки, чтобы не сравнивать Холодильники и Телефоны.
  • tpl - шаблон с html разметкой, по умолчанию tpl.Compare.Page.

Шаг 4. Добавьте в шапку сайта ссылку на страницу сравнения (по аналогии с мини-корзиной miniShop2).

Вы можете использовать готовый чанк tpl.Compare.Mini или добавить HTML вручную:

html
<a href="/compare" class="compare-mini">
    Сравнить <i class="compare-mini__count"></i>
</a>

Здесь будет отображаться кол-во товаров в сравнении.

Когда в сравнении будут товары, то к ссылке добавится класс compare-mini--active, что позволит управлять её внешним видом (или видимостью).

К ссылке можете добавить параметр list для перехода на конкретный список сравнения: /compare?list=Товары.

Системные настройки ​

КлючПо умолчаниюНазначение
compare_page_id0ID ресурса страницы сравнения
compare_list_limit100Максимальное количество товаров в одном списке
compare_storage_handlerCompare\Storages\SessionStorageКласс хранилища, Compare\Storages\SessionStorage для хранения данных в сессии, Compare\Storages\DbStorage для хранения данных в БД
compare_anonymous_ttl_days30Срок хранения списков анонимных пользователей (только для DbStorage)

Заключение ​

Обсуждение компонента, вопросы автору задавайте на сайте https://modx.pro или в поддержке https://modstore.pro (для купленных дополнений).