Создание плагина товара
Привет всем!
Я новичок в ModX. Делаю свой первый интернет-магазин на ModX Revo, решил использовать miniShop2. Первая трудность возникла при добавлении нового свойства товара с помощью плагина товара. С инструкцией ознакомился docs.modx.pro/components/minishop2/development/plug-ins-products.
Что я сделал? Я создал контроллер плагина, сохранил его в index.php и положил его в папку с названием своего плагина: core/components/minishop2/plugins/msplvolume
Содержание файла index.php:
Потом я добавил поле в таблицу:
Теперь я пытаюсь получить значение volume и вывести его на странице продукта.
Я по примеру вывода свойства weight, добавил в чанк msProduct.content следующий код:
Я новичок в 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>
В итоге объем не выводится. Подскажите, пожалуйста, что я делаю не так? Комментарии: 18
Проверь: при создании столбца ты указал DEFAULT NULL, а в мапе default — 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;
Вопрос решен. Оказалось всё дело в том, что была установлена не самая свежая версия минишопа.
Значение 'manager' в index.php относится к папке «manager»? Т.е. если у меня advanced установка Modx и я переименовывал папку «manager» — в этом месте мне нужно указать свое название папки?
Я думаю manager это переменная в которой хранится путь к файлу который расширяет админку, поэтому не нужно указывать ваше имя папки вместо manager, просто проверьте что путь верен и нужный js файл лежит где надо.
Спасибо с этим все ясно. Не в курсе ли вы еще одного вопроса…
Раньше я пользовался старым методом, а теперь Василий не советует так поступать и советет регистрировать плагин через API и приводит для этого код
Раньше я пользовался старым методом, а теперь Василий не советует так поступать и советет регистрировать плагин через API и приводит для этого код
if ($miniShop2 = $modx->getService('miniShop2')) {
$miniShop2->addPlugin('msplColor', '{core_path}components/msplcolor/index.php');
}
А куда нужно вставлять этот код? Создать од него в админке плагин на какое-то событие?
Да, вот по шагам:
Создаешь плагин, например rukav. Код:
<?php
if ($miniShop2 = $modx->getService('miniShop2')) {
$miniShop2->addPlugin('rukav', '{core_path}components/rukav/index.php');
}
И СТАВИШЬ ЕГО НА СОБЫТИЕ: OnMODXInit (для его регистрации, необходимо только для регистрации плагина один раз).
Создаешь плагин, например rukav. Код:
<?php
if ($miniShop2 = $modx->getService('miniShop2')) {
$miniShop2->addPlugin('rukav', '{core_path}components/rukav/index.php');
}
И СТАВИШЬ ЕГО НА СОБЫТИЕ: OnMODXInit (для его регистрации, необходимо только для регистрации плагина один раз).
Спасибо я так и сделал. Только у меня именно после регистрации плагина сайт валится — просто пропадает из сети.)) Уже два раза. Разбираюсь в чем дело. А что значит «только для регистрации плагина один раз»? Я просто добавил плагин и указал событие OnMODXInit? Нужно еще что-то делать, чтобы уточнить «регистрацию один раз»?
Напиши почту, я пришлю инструкцию которую создавал для человека. А плагин нужно просто добавить, и назначить событие и сохранить, чтобы он зарегистрировался и все.
У вас заблокирована возможность отправки писем в профиле.
Исправил.
Спасибо.
Алексей, не могли бы Вы написать сюда информацию по регистрации плагина через API?
Добрый день!
Так я выше написал, как регистрировать плагин. Если не понятно пришлите адрес почты, я вышлю инструкцию с примером.
Так я выше написал, как регистрировать плагин. Если не понятно пришлите адрес почты, я вышлю инструкцию с примером.
Прислал.
Доброе время суток, Алексей!
Не отправляются письма Вам. SMTP Error…
Просьба написать инструкцию по регистрации плагина.
Собственно, не понятна фраза «необходимо только для регистрации плагина один раз».
Так же не понятны различия между старым/новым способом.
В обоих случаях — контроллер кладем в папку, и 2 других файла — те же?
Спасибо
PS Поиском пользовался, в схожих темах обсуждение просто повторяется…
Не отправляются письма Вам. SMTP Error…
Просьба написать инструкцию по регистрации плагина.
Собственно, не понятна фраза «необходимо только для регистрации плагина один раз».
Так же не понятны различия между старым/новым способом.
В обоих случаях — контроллер кладем в папку, и 2 других файла — те же?
Спасибо
PS Поиском пользовался, в схожих темах обсуждение просто повторяется…
С различиями между старым/новым способом — разобрался.
Осилить бы фразу про «1 раз!»
Подразумевается — указать событие OnMODXInit?
Спасибо
Осилить бы фразу про «1 раз!»
Подразумевается — указать событие OnMODXInit?
Спасибо
Добрый день!
Да, поставить это событие, чтобы зарегистрировать плагин. Если надо, напишите почту, я пришлю инструкцию.
Да, поставить это событие, чтобы зарегистрировать плагин. Если надо, напишите почту, я пришлю инструкцию.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.