Страница 1 из 1

Работа с вновь созданным объектом в модуле

Добавлено: 21.03.2021, 10:59
korshunov
При разработке модуля встретилась такая трудность.
Модуль создает галерею изображений для страницы подобно тому, как сделано в товаре.
При сохранении страницы в адмике перехватываю этот момент
$this->registerChainExtension(
[BackendPagesRequest::class, 'postPage'],
[Extender5::class, 'extendPostPage']);
и добавляю к странице изображения. В основном все работает.

Но если создается новая страница, то для записи изображений надо знать ID нового объекта, а он в этой ситуации передается как 0. Как по-другому перехватить нужное событие, не вижу. Примеров подобного в стандартных модулях найти не смог. Знатоки, подскажите, пожалуйста...

Добавлено: 21.03.2021, 12:29
zyxer
Расширьте методы add и update в backend/Helpers/BackendPagesHelper.php первый возвращает id, второй принимает id как аргумент

Добавлено: 21.03.2021, 14:27
korshunov
При расширении метода BackendPagesHelper::add все получается, в экстендер передается правильный параметр insertId.
А вот при расширении метода BackendPagesHelper::update передаваемый в экстендер параметр всегда true или false, что не позволяет выполнить задачу.

В итоге получилось с двумя расширениями для BackendPagesHelper::add и BackendPagesRequest::postPage - каждое работает для своего случая. Но это и некрасиво и нерационально.

Надо бы в BackendPagesHelper::update для экстендера передавать что-то более содержательное.

А вот в аналогичном месте для BackendBlogHelper::update передается параметром null.
А в аналогичном месте для BackendProductsHelper::update передается весь объект $product.

То есть передаваемые параметры гуляют как хотят. Надо бы сделать единообразно...

Добавлено: 21.03.2021, 18:16
zyxer
Их крайне сложно привести к одной последовательности.
Вам в экстендере update необходимо принять второй аргумент, там будет нужный id.

Вот более подробно об аргументах экстендера viewtopic.php?f=9&t=1651&p=7523#p7523
https://github.com/OkayCMS/OkayCMS/blob/master/do ... enders.md#аргументы-экстендера