Товар
Товар miniShop2 является расширением класса обычного ресурса MODX. Он отличается собственным интерфейсом в системе управления и расширенным набором свойств.
Основное меню
При создании товара вы можете только сохранить его, или отменить это действие.
А при изменении добавляются еще кнопки просмотра на сайте, копирования и перехода по соседним товарам (если они есть).
Панель товара
Товар наследует и расширяет стандартную панель ресурса MODX. Так как разных свойств у него много, все они удобно расположены в отдельном наборе вкладок.
Первой идёт стандартные свойства ресурса:
Затем настройки ресурса:
Обратите внимание, что чекбокс "Контейнер" заменяется на "Показывать в меню". Товары не могут быть контейнерами, для этого нужно использовать категории. Все товары по умолчанию скрываются из меню, чтобы дерево работало быстрее, но вы можете выборочно их показывать с помощью этого переключателя.
Поведение этого переключателя при создании нового товара управляется системной настройкой ms2_product_show_in_tree_default.
Свойства товара
Это специальная вкладка, на которой собраны дополнительные свойства товара, такие как цена, артикул, вес, производитель и т.д. Свойства товара обязательны и едины для всех.
Набор и порядок вывода полей на этой вкладке управляется системной настройкой ms2_product_extra_fields. Доступны по умолчанию:
- price - стоимость товара, число до 2х знаков после запятой
- old_price - стоимость товара, число до 2х знаков после запятой
- article - артикул, можно редактировать как текст
- weight - вес товара, число до 3х знаков после запятой
- color - массив цветов товара, автосписок
- size - массив размеров товара, автосписок
- made_in - страна производства товара, обычный текст, с подсказками
- vendor - выбор производителя из выпадающего списка
- tags - массив тегов товара, автосписок
- new - отметка о том, что товар новинка: да \ нет
- pupular - отметка о том, что товар популярный: да \ нет
- favorite - отметка о том, что товар особенный: да \ нет
Изменить набор доступных свойств можно только через систему плагинов. Саму вкладку можно скрыть через настройку ms2_product_tab_extra.
Опции товара
Неограниченный список опций, которые наследуются от категории и могут отличаться у разных товаров.
Сами опции создаются в соответствующем разделе настроек магазина и добавляются в настройках категории. Если у категории нет опций, то эта вкладка не выводится. Также её можно скрыть принудительно, используя настройку ms2_product_tab_options.
Подробнее про опции товаров можно прочитать в соответствующем разделе.
Связи товара
Эта вкладка появляется только при редактировании товара, потому что для её работы должен существовать id товара, который отсутствует на момент его создания.
Доступные связи создаются в настройках магазина. Выключить эту вкладку можно системной настройкой ms2_product_tab_links.
Категории
Каждый товар магазина может находится в нескольких категориях. У него должна быть одна обязательная категория, прописанная в свойстве parent, и могут быть дополнительные - указанные на этой вкладке.
Не забудьте сохранить товар при изменении набора категорий! Родную категорию товара из дерева выключить нельзя.
Комментарии
Эта вкладка выводится только если на сайте установлен компонент Tickets и включена системная настройка ms2_product_show_comments.
Для того, чтобы посетители могли комментировать ваши товары, нужно вызвать на их страницах сниппет TicketComments.
Галерея
Панель загрузки файлов товара, которая является упрощённой версией платного дополнения ms2Gallery. В основном используется для загрузки изображений, но может хранить и другие типы файлов, разрешенные в настройках источника медиа.
Появляется только при редактировании товара.
Основным отличием от аналогов является генерация превью в момент загрузки и полный отказ от использования phpthumbof и других подобных фильтров вывода. Это даёт максимальную скорость, поскольку выводятся прямые ссылки на готовые изображения, и позволяет выносить файлы товара на сторонние CDN сервисы (Amazon S3, Selectel Cloud Storage).
Файлы можно сортировать перетаскиванием, есть контекстное меню и мультивыделение через Ctrl(Cmd) и Shift.
Первая картинка товара является для него основной и выводится на вкладке "Документ".
Ссылки на неё и её превью сохраняются в свойствах image
и thumb
товара, чтобы можно было выводить их в каталоге без дополнительных запросов.
У каждого товара есть свой источник файлов (Media source), который управляет параметрами загрузки. Основные свойства:
- basePath - путь к директории с файлами товаров. По умолчанию:
assets/images/products/
- basePathRelative - basePath сожет быть указан относительно корня сайта, если включена эта опция.
- baseUrl - url директории с файлами товаров, обычно совпадает с basePath, если включена basePathRelative.
- baseUrlRelative - baseUrl может быть указан относительно корня сайта, если включена эта опция.
- allowedFileTypes - разрешённые для загрузки типы файлов. По умолчанию только изображения:
jpg,jpeg,png,gif
. - imageExtensions - какие типы файлов являются изображениями. По умолчанию:
jpg,jpeg,png,gif
- thumbnailType - формат файлов превью: JPG или PNG.
- thumbnailQuality - качество генерируемого превью, от 0 до 100, где 100 - максимальное качество.
- skipFiles - служебные типы файлов, которые не нужно показывать.
- thumbnails - настройка генерации картинок-превью в виде JSON массива. Можно указывать любые параметры, которые примет phpThumb.
- maxUploadWidth - максимальная ширина изображения. Всё что больше, будет пережато javascript на клиенте, перед загрузкой.
- maxUploadHeight - максимальная высота изображения. Всё что больше, будет пережато javascript на клиенте, перед загрузкой.
- maxUploadSize - максимальный размер изображения, в байтах.
- imageNameType - вид наименования файлов: hash от содержимого, или обработка названия файла алгоритмом генерации friendly имён ресурсов.
При изменении источника медиа товара, уже загруженные файлы в него не скопируются - вам нужно позаботиться об этом самостоятельно.
Основные настройки phpThumb
- w - ширина превью в пикселях
- h - высота превью в пикселях
- zc - приблизить и обрезать изображение, чтобы вписать его в заданные h и w
- bg - цвет фона в виде html color hex (ffffff, 000000 и т.п.)
- far - подогнать в размеры h и w без обрезки. Требует указания фона в bg
- q - качество изображения, от 0 до 100
- ar - автоповорот изображения c использованием данных EXIF
Если нужно подгонять изображения только по высоте или ширине, то нужно указывать только h или w.
[{"w":120,"q":90,"zc":"1","bg":"000000"},{"h":270,"q":90,"far":"1","bg":"ffffff"}]
Остальные параметры смотрите в документации phpThumb.
Обновление превью
При изменении настроек источника файлов нужно перегенерировать все превью.
Если товаров немного, то можно сделать это вручную, выбирая нужные картинки и обновляя через контекстное меню
Или вы можете обновить сразу все картинки специальным скриптом:
<?php
$step = 5;
$offset = isset($_SESSION['galgenoffset']) && $_SESSION['galgenoffset'] ? $_SESSION['galgenoffset'] : 0;
$miniShop2 = $modx->getService('minishop2');
$modx->setLogLevel(MODX_LOG_LEVEL_ERROR);
$q = $modx->newQuery('msProductFile', array('parent' => 0));
$total = $modx->getCount('msProductFile', $q);
$q->sortby('product_id', 'ASC');
$q->sortby('rank', 'DESC');
$q->limit($step,$offset);
$resources = $modx->getCollection('msProductFile', $q);
foreach ($resources as $resource) {
$modx->runProcessor('mgr/gallery/generate', array('id' => $resource->id),
array('processors_path' => $modx->getOption('core_path').'components/minishop2/processors/'));
}
$_SESSION['galgenoffset'] = $offset + $step;
if ($_SESSION['galgenoffset'] >= $total) {
$sucsess = 100;
$_SESSION['Console']['completed'] = true;
unset($_SESSION['galgenoffset']);
} else {
$sucsess = round($_SESSION['galgenoffset'] / $total, 2) * 100;
$_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
if ($i <= $sucsess) {
print '=';
} else {
print '_';
}
}
$current = $_SESSION['galgenoffset'] ?
$_SESSION['galgenoffset'] :
($sucsess == 100 ? $total : 0);
print "\n";
print $sucsess.'% ('.$current.')'."\n\n";
Так как операция генерации превью может занять длительное время, лучше запускать этот скрипт из консоли сервера.
Дубликаты
Товары можно копировать, при этом копируются:
- Все свойства документа
- Все настройки документа
- Свойства товара
- Опции товара
- Связи товара
- Категории товара
Файлы галереи не копируются просто потому, что это длительная операция, особенно если используется удалённый источник файлов типа Amazon S3, и процесс может отвалиться по таймауту.