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

Привет всем!
Я новичок в 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, 03:57
1
963
0

Комментарии: 18

Алексей Ерохин
03 ноября 2016, 15:39
0
Проверь: при создании столбца ты указал DEFAULT NULL, а в мапе default — 0
    Антон А.
    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;
Антон А.
10 ноября 2016, 10:31
0
Вопрос решен. Оказалось всё дело в том, что была установлена не самая свежая версия минишопа.
Futuris
17 декабря 2016, 19:24
0
Значение 'manager' в index.php относится к папке «manager»? Т.е. если у меня advanced установка Modx и я переименовывал папку «manager» — в этом месте мне нужно указать свое название папки?
    Антон А.
    17 декабря 2016, 22:52
    0
    Я думаю manager это переменная в которой хранится путь к файлу который расширяет админку, поэтому не нужно указывать ваше имя папки вместо manager, просто проверьте что путь верен и нужный js файл лежит где надо.
      Futuris
      18 декабря 2016, 12:44
      0
      Спасибо с этим все ясно. Не в курсе ли вы еще одного вопроса…
      Раньше я пользовался старым методом, а теперь Василий не советует так поступать и советет регистрировать плагин через API и приводит для этого код
      if ($miniShop2 = $modx->getService('miniShop2')) {
          $miniShop2->addPlugin('msplColor', '{core_path}components/msplcolor/index.php');
      }
      А куда нужно вставлять этот код? Создать од него в админке плагин на какое-то событие?
        Алексей
        19 декабря 2016, 10:44
        +1
        Да, вот по шагам:
        Создаешь плагин, например rukav. Код:
        <?php
        if ($miniShop2 = $modx->getService('miniShop2')) {
        $miniShop2->addPlugin('rukav', '{core_path}components/rukav/index.php');
        }
        И СТАВИШЬ ЕГО НА СОБЫТИЕ: OnMODXInit (для его регистрации, необходимо только для регистрации плагина один раз).
          Futuris
          19 декабря 2016, 10:49
          0
          Спасибо я так и сделал. Только у меня именно после регистрации плагина сайт валится — просто пропадает из сети.)) Уже два раза. Разбираюсь в чем дело. А что значит «только для регистрации плагина один раз»? Я просто добавил плагин и указал событие OnMODXInit? Нужно еще что-то делать, чтобы уточнить «регистрацию один раз»?
            Алексей
            19 декабря 2016, 11:22
            0
            Напиши почту, я пришлю инструкцию которую создавал для человека. А плагин нужно просто добавить, и назначить событие и сохранить, чтобы он зарегистрировался и все.
              Futuris
              19 декабря 2016, 12:01
              0
              У вас заблокирована возможность отправки писем в профиле.
                Алексей
                19 декабря 2016, 12:13
                0
                Исправил.
                  Futuris
                  19 декабря 2016, 12:37
                  0
                  Спасибо.
              Александр
              04 мая 2017, 00:39
              0
              Алексей, не могли бы Вы написать сюда информацию по регистрации плагина через API?
                Алексей
                04 мая 2017, 10:16
                0
                Добрый день!
                Так я выше написал, как регистрировать плагин. Если не понятно пришлите адрес почты, я вышлю инструкцию с примером.
                  Александр
                  04 мая 2017, 12:24
                  0
                  Прислал.
                  Iskatel
                  28 июня 2018, 15:35
                  0
                  Доброе время суток, Алексей!

                  Не отправляются письма Вам. SMTP Error…
                  Просьба написать инструкцию по регистрации плагина.
                  Собственно, не понятна фраза «необходимо только для регистрации плагина один раз».
                  Так же не понятны различия между старым/новым способом.
                  В обоих случаях — контроллер кладем в папку, и 2 других файла — те же?
                  Спасибо

                  PS Поиском пользовался, в схожих темах обсуждение просто повторяется…
                  Iskatel
                  28 июня 2018, 20:25
                  0
                  С различиями между старым/новым способом — разобрался.
                  Осилить бы фразу про «1 раз!»
                  Подразумевается — указать событие OnMODXInit?
                  Спасибо
                    Алексей
                    29 июня 2018, 11:18
                    0
                    Добрый день!
                    Да, поставить это событие, чтобы зарегистрировать плагин. Если надо, напишите почту, я пришлю инструкцию.