Товар

12 августа 2016, 04:01

Товар 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
define('MODX_API_MODE', true);
require 'index.php'; // Этот файл лежит в корне сайта

$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

// Проходимся по всем товарам
$products = $modx->getIterator('msProduct', array('class_key' => 'msProduct'));
foreach ($products as $product) {
    // Получаем оригиналы их картинок
    $files = $product->getMany('Files', array('parent' => 0));
    foreach ($files as $file) {
        // Затем получаем их преью
        $children = $file->getMany('Children');
        foreach ($children as $child) {
            // Удаляем эти превью, вместе с файлами
            $child->remove();
        }
        // И генерируем новые
        $file->generateThumbnails();

        // Если это первый файл в галерее - обновляем ссылку на превью товара
        /** @var msProductData $data */
        if ($file->get('rank') == 0 && $data = $product->getOne('Data')) {
            $thumb = $file->getFirstThumbnail();
            $data->set('thumb', $thumb['url']);
            $data->save();
        }
    }
}

echo microtime(true) - $modx->startTime;

Так как операция генерации превью может занять длительное время, лучше запускать этот скрипт из консоли сервера.

Дубликаты

Товары можно копировать, при этом копируются:

  • Все свойства документа
  • Все настройки документа
  • Свойства товара
  • Опции товара
  • Связи товара
  • Категории товара

Файлы галереи не копируются просто потому, что это длительная операция, особенно если используется удалённый источник файлов типа Amazon S3, и процесс может отвалиться по таймауту.