Создание плагина товара Новый

Дополнение: miniShop2

Привет всем!
Я новичок в ModX. Делаю свой первый интернет-магазин на ModX Revo, решил использовать miniShop2. Первая трудность возникла при добавлении нового свойства товара с помощью плагина товара. С инструкцией ознакомился docs.modx.pro/components/minishop2/development/plug-ins-products.

Что я сделал? Я создал контроллер плагина, сохранил его в index.php и положил его в папку с названием своего плагина: core/components/minishop2/plugins/msplvolume
Содержание файла index.php:
<?php
return array(
    'map' => array(
        'msProductData' => require_once 'msproductdata.inc.php',
    ),
    'manager' => array(
        'msProductData' => MODX_ASSETS_URL . 'components/msplvolume/msproductdata.js',
    ),
);
Пока меня не интересует массив manager (расширение админки), поэтому, я создал только один файл msproductdata.inc.php. В нем я написал, что хочу расширить модель данных продукта, добавив одно целочисленное поле volume. Вот код:
<?php
return array(
    'fields' => array(
        'volume' => 0,
    ),
    'fieldMeta' => array(
        'volume' => array(
            'dbtype' => 'int',
            'precision' => '10',
            'phptype' => 'integer',
            'null' => true,
            'default' => 0,
        ),
    ),
);
Файл msproductdata.inc.php я сохранил в той же папке что и index.php.

Потом я добавил поле в таблицу:
ALTER TABLE `modx_ms2_products` ADD `volume` INT NULL DEFAULT NULL;
Как я понял на этом процесс закончен. Дальше miniShop2 и ModX все сделает сами.

Теперь я пытаюсь получить значение volume и вывести его на странице продукта.
Я по примеру вывода свойства weight, добавил в чанк msProduct.content следующий код:
<div class="form-group">
				<label class="col-sm-2 control-label">Объем: </label>
				<div class="col-sm-3">
					<label class="checkbox">[[+volume]] мл.</label>
				</div>
			</div>
В итоге объем не выводится. Подскажите, пожалуйста, что я делаю не так?
03 ноября 2016, 06:57    Антон А.   
1    485 0

Комментарии (15)

  1. Алексей Ерохин 03 ноября 2016, 15:39 # 0
    Проверь: при создании столбца ты указал DEFAULT NULL, а в мапе default — 0
    1. Антон А. 04 ноября 2016, 08:19 # 0
      Это я допустил опечатку тут в посте, проверил в базе по умолчанию значние — 0, как в мапе.
      Вот моя таблица сейчас:
      CREATE TABLE IF NOT EXISTS `modx_ms2_products` (
        `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
        `article` varchar(50) DEFAULT NULL,
        `price` decimal(12,2) DEFAULT '0.00',
        `old_price` decimal(12,2) DEFAULT '0.00',
        `weight` decimal(13,3) DEFAULT '0.000',
        `image` varchar(255) DEFAULT NULL,
        `thumb` varchar(255) DEFAULT NULL,
        `vendor` int(10) UNSIGNED DEFAULT '0',
        `made_in` varchar(100) DEFAULT '',
        `new` tinyint(1) UNSIGNED DEFAULT '0',
        `popular` tinyint(1) UNSIGNED DEFAULT '0',
        `favorite` tinyint(1) UNSIGNED DEFAULT '0',
        `tags` text,
        `color` text,
        `size` text,
        `source` int(10) UNSIGNED DEFAULT '1',
        `volume` int(10) DEFAULT '0',
        PRIMARY KEY (`id`),
        KEY `article` (`article`),
        KEY `price` (`price`),
        KEY `old_price` (`old_price`),
        KEY `vendor` (`vendor`),
        KEY `new` (`new`),
        KEY `favorite` (`favorite`),
        KEY `popular` (`popular`),
        KEY `made_in` (`made_in`)
      ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
    2. Антон А. 10 ноября 2016, 10:31 # 0
      Вопрос решен. Оказалось всё дело в том, что была установлена не самая свежая версия минишопа.
      1. Futuris 17 декабря 2016, 19:24 # 0
        Значение 'manager' в index.php относится к папке «manager»? Т.е. если у меня advanced установка Modx и я переименовывал папку «manager» — в этом месте мне нужно указать свое название папки?
        1. Антон А. 17 декабря 2016, 22:52 # 0
          Я думаю manager это переменная в которой хранится путь к файлу который расширяет админку, поэтому не нужно указывать ваше имя папки вместо manager, просто проверьте что путь верен и нужный js файл лежит где надо.
          1. Futuris 18 декабря 2016, 12:44 # 0
            Спасибо с этим все ясно. Не в курсе ли вы еще одного вопроса…
            Раньше я пользовался старым методом, а теперь Василий не советует так поступать и советет регистрировать плагин через API и приводит для этого код
            if ($miniShop2 = $modx->getService('miniShop2')) {
                $miniShop2->addPlugin('msplColor', '{core_path}components/msplcolor/index.php');
            }
            А куда нужно вставлять этот код? Создать од него в админке плагин на какое-то событие?
            1. Алексей 19 декабря 2016, 10:44 # +1
              Да, вот по шагам:
              Создаешь плагин, например rukav. Код:
              <?php
              if ($miniShop2 = $modx->getService('miniShop2')) {
              $miniShop2->addPlugin('rukav', '{core_path}components/rukav/index.php');
              }
              И СТАВИШЬ ЕГО НА СОБЫТИЕ: OnMODXInit (для его регистрации, необходимо только для регистрации плагина один раз).
              1. Futuris 19 декабря 2016, 10:49 # 0
                Спасибо я так и сделал. Только у меня именно после регистрации плагина сайт валится — просто пропадает из сети.)) Уже два раза. Разбираюсь в чем дело. А что значит «только для регистрации плагина один раз»? Я просто добавил плагин и указал событие OnMODXInit? Нужно еще что-то делать, чтобы уточнить «регистрацию один раз»?
                1. Алексей 19 декабря 2016, 11:22 # 0
                  Напиши почту, я пришлю инструкцию которую создавал для человека. А плагин нужно просто добавить, и назначить событие и сохранить, чтобы он зарегистрировался и все.
                  1. Futuris 19 декабря 2016, 12:01 # 0
                    У вас заблокирована возможность отправки писем в профиле.
                    1. Алексей 19 декабря 2016, 12:13 # 0
                      Исправил.
                      1. Futuris 19 декабря 2016, 12:37 # 0
                        Спасибо.
                    2. Александр 04 мая 2017, 00:39 # 0
                      Алексей, не могли бы Вы написать сюда информацию по регистрации плагина через API?
                      1. Алексей 04 мая 2017, 10:16 # 0
                        Добрый день!
                        Так я выше написал, как регистрировать плагин. Если не понятно пришлите адрес почты, я вышлю инструкцию с примером.
                        1. Александр 04 мая 2017, 12:24 # 0
                          Прислал.
          Вы должны авторизоваться, чтобы оставлять комментарии.