Обзор интерфейса miniShop2

Ну вот и пришла пора установить из репозитория компонент интернет-магазина miniShop2.

Это уже вторая версия моего решения для ведения интернет-коммерции на базе MODX Revolution. Она, конечно, не идеальна, но выгодно отличается от аналогов мощным пользовательским интерфейсом. Причем, судя по регулярным вопросам, которые я получаю, далеко не все знают о его возможностях. Поэтому, давайте рассмотрим админку miniShop2.

Настройки

Для начала разберемся с самым простым - разделом настроек. Это обычная страница админки, с табами и таблицами. Окно редактирования настроек вызывается через контекстное меню правой кнопкой мыши. Также можно редактировать основные поля двойным кликом по ним.

По умолчанию в настройках следующие разделы. #### Варианты доставки

Здесь вы создаёте варианты доставки товаров, по умолчанию идёт один - самовывоз. У каждой доставки есть несколько свойств: - Дополнительная стоимость - просто сумма, которая добавляется к заказу. Напишите 500, будет +500 к заказу при выборе этого метода.

  • Стоимость за единицу веса - а это уже сумма, которая добавляется за каждый килограмм веса.
  • Стоимость за единицу расстояния - это поле по умолчанию не используется, но вы можете прописать для него свою логику в классе этого метода доставки.
  • Логотип - просто картинка, которая будет выводиться в списке способов доставки.
  • Описание - ну тут понятно и так.
  • Обязательные поля - это то, что будет требоваться для обязательного заполнения покупателем при создании заказа. Здесь можно использовать любые поля формы заказа.
  • Способы оплаты - привязка оплаты к доставке. Выберите, какие способоы оплаты будут открываться при выборе этой доставки.
  • Класс-обработчик - это необязательное поле, в котором можно указать имя собственного класса для обработки логики доставки. По умолчанию используется msOrderHandler, но вы можете положить свой файл в /core/components/minishop2/custom/delivery/любоеимя.class.php
<?php
class myDelivery extends msDeliveryHandler {
}
Потом укажите в настройке **myDelivery** - и он будет использоваться для расчета стоимости доставки.

-

Способы оплаты

Разные способы оплаты, которые можно назначать доставкам. Обратите внимание, что в магазине есть куча готовых способов за разумные деньги. Настройки следующие: - Дополнительная стоимость - сколько прибавить просто при выборе этой оплаты.

  • Логотип и описание - понятно
  • Класс-обработчик работает аналогично доставке, только класс должен расширять msPaymentHandler., а файл нужно класть в /core/components/minishop2/custom/payment/
<?php
class myPayment extends msPaymentHandler {
}

Статусы заказа

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

Обязательными статусами (которые нельзя удалить) являются: Новый, Оплачен, Отправлен и Отменён. Свойства статусов: - Цвет - просто цвет статуса, который будет отображаться в админке.

  • Письмо покупателю - нужно ли отправлять письмо покупателю о переключении заказа на этот статус? Если да - то укажите тему и чанк оформления. По умолчанию в теме используются записи из лексикона MS2.
  • Письмо менеджеру - то же самое, только письма уходят на email менеджеров, указанных в системной настройке ms2_email_manager. Если там пусто, то менеджером считается адрес в настройке emailsender.
  • Включен - если статус не включен, то на него нельзя переключить заказ.
  • Итоговый - если заказ переключен на этот статус, то больше статус поменять нельзя. По умолчанию итоговыми статусами являются Отправлен и Отменён.
  • Фиксирует - если заказ переключен на фиксирующий, то его нельзя переключить на предыдущий статус. То есть, если заказ Оплачен, то вы не можете переключить его в Новый.

Вы моежет добавлять сколько угодно статусов и переключить заказы на них в админке. Например: "Проверен", "Ожидает сборки" и т.п. Пользователь будет автоматически получать уведомления об этих изменения (если включено), а также видеть свой статус в личном кабинете Office, если вы его установите. Там и цвет статуса показывается.

Производители товаров

Это справочник производителей. Всё, что вы в него внесёте, можно будет выбрать в поле "Производитель" у товара. Причем, там будет работать автоподсказка по имеющимся записям. Я думаю, свойства описывать бессмысленно, кроме разве что "Ресурс" - это возможная связь со страницей описания бренда. Учитывая, что все поля производителя доступны на странице товара через плейсхолдеры [[+vendor.name]], [[+vendor.description]] и т.п., вы можете вывести ссылку на описание производителя вот так:

Производитель: <a href="[[~[[+vendor.resource]]]]">[[+vendor.name]]</a>

Довольно удобно, как мне кажется.

Связи товаров

А вот этот раздел - очень интересная особенность miniShop2. Вы можете создать определенные виды связей товаров, а потом в настройках товаров связать их друг с другом. Подробности вы можете прочитать в отдельной заметке.

Категория товара

miniShop2 устанавливает 2 особых типа ресурса в систему MODX: категории и товары. Отличаются они от обычных ресурсов собственным интерфейсом и логикой работы.

Например, у категории поле content вынесено на вторую вкладку, а на его месте красуется таблица с дочерними товарами категории. -

Какие же есть особенности у категорий miniShop2?

Улучшенная панель кнопок: добавлены иконки Font Awesome, индикация цветом и быстрая навигация по соседним категориям. Для быстрой навигации можно использовать быстрые клавиши: Alt + стрелочки вверх, вправо и влево. Если соседних категорий нет, то кнопки неактивны. Кнопка вверх отправляет вас именно в вышестоящий документ, а не на экран Home, как у других ресурсов.

Вы можете указать content по умолчанию для новой категории товаров в настройке ms2_category_content_default. По умолчанию там:

[[!pdoPage?
    &element=`msProducts`
]]

[[!+page.nav]]

Запоминается состояние вкладок - откройте "Настройки" и нажмите F5 - вкладка будет активной. Отключить можно настройкой ms2_category_remember_tabs.

Если на сайте установлен компонент Tickets, то у категории появится дополнительная вкладка с комментариями ко всем товарам этой категории. Отключить можно настройкой ms2_category_show_comments.

Таблица товаров ресурсов показывает все товары, во всех дочерних категориях. Если это не прямые потомки, то они отображаются серым цветом и подписывается имя категории. Отключить можно ms2_category_show_nested_products.

В таблице есть поиск, сортировка нажатием на столбцы и она запоминает своё состояние. Если вы искали какой-то товар, затем перешли на него, вернулись - то таблица так и будет показывать найденный результат. Это поведение можно отключить настройкой ms2_category_remember_grid.

Родные товары категории (не от дочерних категорий) можно сортировать перетаскиванием.

Самое интересное: вы можете указать, какие поля товара нужно выводить в таблице через системную настройку ms2_category_grid_fields. Более того, вы можете быстро редактировать основные поля двойным кликом! По умолчанию выводятся

pagetitle,article,price,weight,thumb,new,favorite,popular

Таким образом, на мой взгляд, таблица товаров категории представляет собой максимально удобный способ управления товарами.

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

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

Таблица эта называется msProductData и по умолчанию в ней хранятся свойства цена, вес, артикул, картинка и т.д. Естественно, что все эти поля вы можете редактировать на странице товара.

На главной панели товара вы видите основные свойства, картинку, 4 вкладки слева и дополнительные поля чуть ниже названия.

По умолчанию вы находитесь на первой вкладке "Веб-страница". Что именно выводить на ней указывается в системной настройке ms2_product_main_fields. По умолчанию там:

pagetitle,longtitle,introtext,price,old_price,article,weight,content,publishedon,pub_date,unpub_date,template,parent,alias,menutitle,searchable,cacheable,richtext,uri_override,uri,hidemenu,show_in_tree

Вся панель разбита на блоки, и в каждом выводятся определенные поля. Подробности здесь.

Обратите внимание, что вы можете указывать и свойства из msProductData, все они будут выведены в отдельном блоке:

Остальные свойства товара, которые не выведены на первой вкладке, выводятся на второй. Её содержимое указывается в настройке ms2_product_extra_fields. По умолчанию там

color,size,vendor,new,popular,favorite,made_in,tags

Естественно, преимущество у первой вкладки, поэтому, если вы указали одно и то же поле для двух панелей, оно будет выведено только на первой. Также имейте в виду, что вы можете добавлять свои собственные поля товарам miniShop2, настраивать их внешний вид и даже перезагружать стандартные! Вот подробное руководство, для продвинутых.

Затем у нас идёт галерея с мультизагрузкой и сортировкой перетаскиванием. Первая картинка из неё копируется в свойства товара image и thumb, чтобы их можно было выводить в каталоге без лишних join.

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

Ну и последняя вкладка - это связи товаров, которые мы создаём в настройках, а здесь выбираем с кем и как связать текущий товар.

В принципе, все довольно интуитивно, и уже не раз описано в документации, но я хочу рассказать еще о некоторых скрытых возможностях.

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

Состояние табов панели товара тоже запоминается - можно отключить ms2_product_remember_tabs.

Вы можете отключить каждую из дополнительных вкладок товара, если вам они не нужны. За это отвечают три настройки: ms2_product_tab_extra, ms2_product_tab_gallery и ms2_product_tab_links.

Если у вас установлен компонент Tickets, то на панеле товара появится вкладка с комментариями к нему. Выключить можно настройкой ms2_product_show_comments.

Настройка ms2_product_source_default указывает источник медиа по умолчанию для галереи товаров, а ms2_template_product_default - умолчательный шаблон.

По умолчанию товары miniShop2 не показываются в дереве ресурсов, чтобы не нагружать его лишний раз, но вы можете изменить это поведение настройкой ms2_product_show_in_tree_default. Она действует только на вновь создаваемые товары, у уже существующих нужно будет отметить чекбокс при редактировании.

Вы можете выбрать превью какого размера показывать в галерее товара - за это отвечает настройка ms2_product_thumbnail_size. По умолчанию там 120х90, но если вы изменили настройки источника файлов, и убрали такой размер - то укажите здесь новый.

При выводе товара на сайте у него автоматически форматируются цена и вес. Вы можете настроить формат в параметрах ms2_price_format и ms2_weight_format.

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

Цена: 500.5
Вес: 15.5

Вы можете отключить обрезание нулей в настройках ms2_price_format_no_zeros и ms2_weight_format_no_zeros, тогда цифры будут:

Цена: 500.50
Вес: 15.500

Ну и наконец вы можете именовать товары по их id, вместо дружественных url - за это отвечает настройка ms2_product_id_as_alias.

Заключение

Насколько я понимаю, у miniShop2, на данный момент, самый богатый и удобный интерфейс управления товарами. Помимо возможности расширения стандартных классов (управления доставкой, оплатой, заказом и корзиной), это вторая его главная особенность по сравнению с конкурирующими решениями.

Советую также почитать старые заметки про интерфейс, возможно найдёте еще что-то интересное.

На следующем занятии мы создадим простенький каталог товаров и будем выводить его на сайте.

← Предыдущая заметка
Большой рассказ про pdoTools, часть вторая
Следующая заметка →
Вывод каталога товаров и оформление заказа
Комментарии (9)
alexlenkAlex Lenk
03.08.2014 19:40

Подскажите русифицировать? Внести правки в файлы я могу, но они исчезнут если обновить miniShop2

bezumkinВасилий Наумкин
03.08.2014 19:41

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

alexlenkAlex Lenk
03.08.2014 19:52

Вот я балда... надо было всего лишь зайти в раздел "Управление словарями" выбрать пространство имен "miniShop2" и там все есть.

Василий, искренне благодарю, ваши курсы стоящие!

bezumkinВасилий Наумкин
03.08.2014 19:53

На здоровье!

Андрей88Андрей
29.08.2014 15:18

1. Скажите пожалуйста, а как реализовать, чтобы в каталоге при выводе товара была кликабельна картинка? На демо сайте кликабельна лишь ссылка возле картинки. Каталог2. Если станет необходимость убрать корзину, как это реализовать, думаю это решается комментирование кода или незначительными правками соответствующих чанков отвечающих за вывод этой корзины?

bezumkinВасилий Наумкин
29.08.2014 18:37

1. Нужно обернуть картинку в ссылку.

2. Достаточно просто убрать добавление в корзину из чанков.

Иван Петров
18.09.2014 15:14

Приветствую! Пытаюсь поменять в категории поле товара weight на size: ms2_category_grid_fields pagetitle,article,price,size,thumb,new,popular Вес пропал, но размер не появился. При этом если вставляю old_price, то все ок. В чем может быть ошибка?

bezumkinВасилий Наумкин
19.09.2014 08:19

size - это JSON поле, а не строка или число. Такие поля в таблице не показываются.

Иван Петров
19.09.2014 11:36

спасибо! и за сам магазин тоже

bezumkin
Василий Наумкин
09.04.2024 01:45
Ошибка 500 Это не похоже на ошибку Nginx, это скорее всего ошибка PHP - надо смотреть его логи. Во...
futuris
Futuris
04.04.2024 05:56
Я просто немного запутался. Когда в абзаце &quot;Vesp/Core&quot; ты пишешь про &quot;новый trait Fil...
bezumkin
Василий Наумкин
20.03.2024 18:21
Volledig!
Андрей
14.03.2024 10:47
Василий! Как всегда очень круто! Моё почтение!
russelgal
russel gal
09.03.2024 17:17
А этот стоило написать хотя бы затем, чтобы получить комментарий от юзера, который ничего не писал ...
inetlover
Александр Наумов
27.01.2024 00:06
Василий, спасибо! Извини, тупанул.
bezumkin
Василий Наумкин
22.01.2024 04:43
Давай-давай!
bezumkin
Василий Наумкин
24.12.2023 11:26
Спасибо!
bezumkin
Василий Наумкин
27.11.2023 02:43
Ура!
bezumkin
Василий Наумкин
25.11.2023 08:30
Vesp тянет 2 зависимости: vesp-frontent для фронта и vesp-core для бэкенда. Их можно обновлять, но э...