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

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #1 korshunov » 21.03.2021, 10:59

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

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

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #2 zyxer » 21.03.2021, 12:29

Расширьте методы add и update в backend/Helpers/BackendPagesHelper.php первый возвращает id, второй принимает id как аргумент
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #3 korshunov » 21.03.2021, 14:27

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

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

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

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

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

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #4 zyxer » 21.03.2021, 18:16

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

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


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 33 гостя