Все оказалось проще. Даже не событие до и после для контроллера, а специальное событие orm.multiupdate.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА. Просто есть такая статья "Как правильно расширять функционал интернет-магазинов ReadyScript?" - так вот в ней приведен якобы полный список событий. По факту же он там устарел и больше не является полным, несмотря на название. Я просто не замечал ниже ссылку на обновленный, в котором конечно же уже есть необходимый хук.
1 17.04.2018 18:50:12
Re: Событие записи в БД при мультиредактировании товаров (3 ответов, оставленных в Вопросы по разработке модулей и API системы)
2 12.04.2018 10:34:05
Re: Событие записи в БД при мультиредактировании товаров (3 ответов, оставленных в Вопросы по разработке модулей и API системы)
Я так понимаю - пока такой возможности нет? Получается нужно непосредственно в actionMultiEdit в админ-контроллере править?
3 11.04.2018 01:01:36
Тема: Событие записи в БД при мультиредактировании товаров (3 ответов, оставленных в Вопросы по разработке модулей и API системы)
Добрый день!
Есть такой хук - orm.afterwrite
Подцепился на него для объекта товара из своего модуля чтобы добавить некоторые моменты после сохранения. Но при мультиэдите в админ-панели данный хук не отрабатывает. Это нормально, или я что-то не так делаю? Хотелось бы чтобы не только при одиночном редактировании выполнялся мой код, но и при множественном.
4 28.09.2017 22:39:49
Тема: Группировка в ORM выборке (1 ответов, оставленных в Вопросы по разработке модулей и API системы)
Добрый день! Делаю отчет по продажам для администраторов и есть задача организовать в запросе группировку по товару, при этом чтобы поля "количество" и "сумма" суммировались. Не нашел такой возможности в подсистеме ORM. Может плохо искал? Или действительно придется вручную формировать запрос?
5 10.09.2017 12:39:36
Re: интерактивный выбор даты в виджете (2 ответов, оставленных в Вопросы по разработке модулей и API системы)
Большое спасибо, все работает отлично!
6 08.09.2017 14:45:43
Тема: интерактивный выбор даты в виджете (2 ответов, оставленных в Вопросы по разработке модулей и API системы)
Доброго дня!
Делаю свой виджет для админ-панели. В нем хочу выводить отчет. Входными параметрами будут дата начала и дата конца. В фильтрах в заказах есть отличный календарик, который я бы с удовольствием применил и там, но не могу разобраться, какую функцию подвесить на события на инпуте? Или какую-то библиотеку еще подключить?
7 17.08.2017 17:18:31
Re: Подключение измененного JS файла. (6 ответов, оставленных в Вопросы по разработке модулей и API системы)
Как админ написал мне не подходит, так как подключение js идет не в шаблоне из модуля, а именно в layout.tpl. Тема у меня отклонированная, так что layout.tpl не перегрузится
8 15.08.2017 13:12:42
Re: Подключение измененного JS файла. (6 ответов, оставленных в Вопросы по разработке модулей и API системы)
нашел, в layout.tpl в теме подключается js. Спасибо за помощь!
9 15.08.2017 13:09:23
Re: Подключение измененного JS файла. (6 ответов, оставленных в Вопросы по разработке модулей и API системы)
Переделанная воздушная. Шаблон я и думал перегрузить изначально и подкинуть в него измененный js, но в шаблоне для данного блок-контроллера я не нашел подключения js
10 15.08.2017 10:55:20
Тема: Подключение измененного JS файла. (6 ответов, оставленных в Вопросы по разработке модулей и API системы)
Добрый день!
Блок-контроллер oneclickcart берет js файл отсюда shop/view/js/jquery.oneclickcart.js
Можно ли в каталоге темы создать js c таким же названием и будет ли он в первую очередь цеплять его как в случае с шаблонами? Если да, то куда именно его положить?
11 11.05.2017 12:15:17
Re: Настройки модуля по-умолчанию (3 ответов, оставленных в Вопросы по разработке модулей и API системы)
Спасибо, все предельно ясно, внесу в modules.xml
Вот мои настройки.
По-умолчанию нужно выставить только некоторые поля с типами INTEGER и STRING, думаю проблем не будет.
<?php
namespace Photomanager\Config;
use RS\Orm\ConfigObject;
use RS\Orm\Type;
/**
* Класс конфигурации модуля
*/
class File extends ConfigObject
{
/**
* Метод инициализации свойств ORM объекта
*
* @return void
*/
function _init()
{
//Дополняем свойства, определенные у родительского класса
parent::_init()->append(array(
t('Требования к обтравке'),
'requirements_enable' => new Type\Integer(array(
'description' => t('Использовать требования к формату фотографий'),
'checkboxview' => array(1,0),
)),
'image_width' => new Type\Integer(array(
'description' => t('Ширина требуемого изображения в px:'),
)),
'image_height' => new Type\Integer(array(
'description' => t('Высота требуемого изображения в px:'),
)),
t('Настройки импорта'),
'max_bundle' => new Type\Integer(array(
'description' => t('Максимальное количество фотографий в пакете у одного обтравщика'),
)),
'separator' => new Type\Varchar(array(
'maxLength' => '1',
'description' => t('Разделитель имени файла и номера при загрузке и выгрузке изображений'),
)),
'compare_product_field' => new Type\Varchar(array(
'maxLength' => '25',
'description' => t('Поле для поиска соответствия имени файла и товара'),
)),
t('Цены'),
'standart_cost' => new Type\Decimal(array(
'description' => t('Цена обтравки по-умолчанию. Используется, если не задана цена обтравщика'),
'allowempty' => false,
'maxlength' => 20,
'decimal' => 2
)),
));
}
}
12 11.05.2017 09:59:26
Тема: Настройки модуля по-умолчанию (3 ответов, оставленных в Вопросы по разработке модулей и API системы)
Добрый день!
Пишу модуль, добавил несколько настроек в него. Помогите при его установке сразу задать некоторым из настроек значения по-умолчанию.
13 16.03.2017 19:34:02
Re: Добавить настройку в блок "Фильтры" (2 ответов, оставленных в Вопросы по разработке модулей и API системы)
Спасибо, то что надо. Дальше разберусь по мануалу.
14 16.03.2017 11:22:07
Тема: Добавить настройку в блок "Фильтры" (2 ответов, оставленных в Вопросы по разработке модулей и API системы)
Добрый день!
Хочу часть фильтров убирать под спойлер в каталоге. Количество отображаемых фильтров нужно вывести в настройки блока. Подскажите, как правильно подцепиться к инициализации блока и расширить его настройки из стороннего модуля.
15 28.10.2016 11:28:36
Re: Переопределение шаблона админки (2 ответов, оставленных в Вопросы по разработке модулей и API системы)
Спасибо!
16 27.10.2016 19:58:07
Тема: Переопределение шаблона админки (2 ответов, оставленных в Вопросы по разработке модулей и API системы)
Добрый день!
Хочу заменить шаблон \templates\system\debug\top.tpl на свой. Возможно ли? И куда положить в своей теме?
17 11.10.2016 12:21:05
Re: Добавление нового метода к объекту товара. (5 ответов, оставленных в Вопросы по разработке модулей и API системы)
Все, спасибо! Не правильно был назван файл с классом CatalogProduct
было: catalogproduct.php, а надо было catalogproduct.inc.php
18 11.10.2016 12:05:35
Re: Добавление нового метода к объекту товара. (5 ответов, оставленных в Вопросы по разработке модулей и API системы)
Сделал все по инструкции. Ошибка должна выводиться на самой странице? Выводится пустая страница, а в консоли - 500 (Internal Server Error).
19 11.10.2016 11:52:50
Re: Добавление нового метода к объекту товара. (5 ответов, оставленных в Вопросы по разработке модулей и API системы)
она ниже, вот полный код из файла handlers.inc.php:
<?php
namespace Custom\Config;
use Exchange\Model\Importers\Catalog;
use \RS\Orm\Type as OrmType;
/**
* Класс предназначен для объявления событий, которые будет прослушивать данный модуль и обработчиков этих событий.
*/
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this
->bind('orm.init.shop-order')
->bind('initialize');
}
/**
* Подключаем методы к объекту товара из стороннего модуля
*/
public static function initialize()
{
\Catalog\Model\Orm\Product::attachClassBehavior(new \Custom\Model\Behavior\CatalogProduct);
}
/**
* Расширяем объект заказа
*
* @param \Shop\Model\Orm\Order $order - объект закзаа
*/
public static function ormInitShopOrder(\Shop\Model\Orm\Order $order)
{
$order->getPropertyIterator()->append(array(
'order_post_id' => new OrmType\Varchar(array(
'maxLength' => '50',
'description' => t('Идентификатор отправления'),
)),
'delivery_cost' => new OrmType\Decimal(array(
'maxLength' => '15',
'decimal' => 2,
'description' => t('Стоимость доставки'),
)),
));
}
}
Модуль был создан ранее и с расширением объекта Заказ справлялся. Проблемы начались после добавления хука ->bind('initialize') и соответствующей функции
20 11.10.2016 08:58:31
Тема: Добавление нового метода к объекту товара. (5 ответов, оставленных в Вопросы по разработке модулей и API системы)
Добрый день!
При попытке расширить поведение ORM-объекта Product возникли сложности.
Исходя из того, насколько я понял видеоурок на эту тему - мною сделано следующее:
1. В стороннем модуле Custom в классе handlers.inc.php:
function init()
{
$this
->bind('orm.init.shop-order')
->bind('initialize');
}
/**
* Подключаем методы к объекту товара из стороннего модуля
*/
public static function initialize()
{
\Catalog\Model\Orm\Product::attachClassBehavior(new \Custom\Model\Behavior\CatalogProduct);
}
2. В \custom\model\behavior\catalogproduct.php:
namespace Custom\Model\Behavior;
use RS\Behavior\BehaviorAbstract;
class CatalogProduct extends BehaviorAbstract
{
/**
* Возвращает массив товаров с с таким же базовым артикулом
*
*/
function getProductsLikeThis()
{
return "test";
}
}
Вроде бы все по инструкции, но при очистке кэша - 500 (Internal Server Error)
До написания необходимой функции и использования ее в шаблоне - соответственно не дошел, так как уперся в данную проблему. Помогите найти ошибку.
21 11.10.2016 08:46:08
Re: Дополнительный фильтр по наличию фотографий товара (15 ответов, оставленных в Вопросы по разработке модулей и API системы)
Финальный вариант, если кого вдруг заинтересует:
$adv_config = \RS\Config\Loader::byModule("custom"); /*Проверяем настройку показа товаров без фотографий*/
if ($adv_config['hide_nophoto_product'] == 1) {
$q = $this->queryObj();
if ($q->select === '*') {
$q->select = null;
$q->select('A.*, X.*');
}
$q->join(new \Photo\Model\Orm\Image, 'I.linkid = A.id', 'I');
$q->groupby('A.id');
}
Выяснилось, что при использовании подзапроса в секции WHERE - ломается напрочь поиск и крайне медленно выполняется запрос в случае использования фильтров на странице каталога. Сделал в итоге через JOIN и добавил условие, так как при поиске должны выбираться только поля из таблицы `A`, а таблица `X` - вообще не джойнится при поиске. Косяков не обнаружено и скорость отличная.
22 30.09.2016 19:30:31
Re: Дополнительный фильтр по наличию фотографий товара (15 ответов, оставленных в Вопросы по разработке модулей и API системы)
Все, теперь я доволен.
$adv_config = \RS\Config\Loader::byModule("custom");
if ($adv_config['hide_nophoto_product'] == 1) {
$qImage = new \RS\Orm\Request();
$qImage
->select('linkid')
->from(new \Photo\Model\Orm\Image(), 'Img');
$this->queryObj()
->where("A.id IN (".$qImage->toSql().")");
}
23 30.09.2016 19:17:35
Re: Дополнительный фильтр по наличию фотографий товара (15 ответов, оставленных в Вопросы по разработке модулей и API системы)
только вот мне не нравится, что замес получился с sql синтаксисом. Хочется как-то в отдельный запрос вывести то, что в скобках, но не пойму, как.
24 30.09.2016 19:15:17
Re: Дополнительный фильтр по наличию фотографий товара (15 ответов, оставленных в Вопросы по разработке модулей и API системы)
Не, так не пойдет. Тогда приджойненные цены не выведутся. Но я нашел способ. Вместо join использовал where с подзапросом и условием, что id товара находится в результатах этого запроса.
$this->queryObj()
->where("A.id IN (SELECT `linkid` FROM `readyscriptyoung`.`rs_images`)");
25 30.09.2016 17:13:33
Re: Дополнительный фильтр по наличию фотографий товара (15 ответов, оставленных в Вопросы по разработке модулей и API системы)
Александр, спасибо. Заработало. Вот текст запроса. Новая проблема - после JOIN в поле id товара передается теперь id изображения. Соответственно, в каталоге начинается вакханалия, ибо везде в переменной $product.id теперь id картинки. Как-то можно исключить из секции SELECT поле Img.id?
SELECT * FROM `readyscriptyoung`.`rs_product` as A
INNER JOIN `readyscriptyoung`.`rs_product_x_dir` as X ON A.id = X.product_id
INNER JOIN `readyscriptyoung`.`rs_images` as Img ON A.id = Img.linkid
WHERE (`A`.`site_id` = '1') AND `X`.`dir_id` IN ('675','676','677','678','679','680','681','682','683','684','685','686','687','688','689','690','691','692','834','835','837','845','846','847','848','849','850','851','852','853','854','855','907','674','694','695','696','698','699','700','701','702','703','838','856','857','858','875','876','900','901','902','904','905','906','693','673','672') AND `A`.`public` = '1' AND `A`.`num` > '0'
ORDER BY dateof DESC