Форум русской поддержки Joomla!® CMS
27.06.2017, 02:30:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как при помощи плагина изменить $data до сохраннения?

 (Прочитано 92 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Septdir
Практически профи
*******

Репутация: +76/-3
Offline Offline

Пол: Мужской
Сообщений: 1790


Skype: septdir


« : 02.06.2017, 16:14:24 »

Конетктс.
Делаю плагин доп поля тип поля subform, но уперся в одну вещь. В идеале надо преобразовать в json $data['com_fields']['имя поля'] еще до события onContentAfterSave. Для того чтобы в базу шли данные в json. Ивент onContentBeforeSave не подойдет. т.к он не позволяет менять дату.
Пока что сделал перезапись значения поля через onContentAfterSave. Но тут целых 2 проблемы.
1. Это лишние запросы.
2. Если по какой-то причине измениться порядок плагинов (хотя основной plugin fields и системный), то работать не будет.
Конечно по большей части пишу плагин для себя и сбой мало вероятен, но все же.
Кстати если кому нужен плагин, могу кинуть я не жадный
« Последнее редактирование: 02.06.2017, 16:50:24 от Septdir » Записан
b2z
Support Team
*****

Репутация: +734/-0
Offline Offline

Пол: Мужской
Сообщений: 7725


Разраблю понемногу


« Ответ #1 : 02.06.2017, 16:50:17 »

Смотрю JModelAdmin
Код
// Trigger the before save event.
$result = $dispatcher->trigger($this->event_before_save, array($context, $table, $isNew, $data));

Можно пробовать $table поменять. Перед ивентом данные уже забиндены в таблицу - $table->bind($data).
$table - объект, а значит всегда передаётся по ссылке, поэтому должен поменяться.
Записан
Septdir
Практически профи
*******

Репутация: +76/-3
Offline Offline

Пол: Мужской
Сообщений: 1790


Skype: septdir


« Ответ #2 : 02.06.2017, 17:09:35 »

Смотрю JModelAdmin
Код
// Trigger the before save event.
$result = $dispatcher->trigger($this->event_before_save, array($context, $table, $isNew, $data));

Можно пробовать $table поменять. Перед ивентом данные уже забиндены в таблицу - $table->bind($data).
$table - объект, а значит всегда передаётся по ссылке, поэтому должен поменяться.
Не не прокатило.
Кстати в офф доке даже написанно, что event_before_save не предназначен для замены. кстати подменить пост тоже не вариант.



Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4079


« Ответ #3 : 02.06.2017, 17:31:40 »

Перед ивентом данные уже забиндены в таблицу - $table->bind($data).
$table - объект, а значит всегда передаётся по ссылке, поэтому должен поменяться.
Тоже так думаю.
Не не прокатило.
Значит, данные, которые нужно менять, не вошли в $table?
Записан
Septdir
Практически профи
*******

Репутация: +76/-3
Offline Offline

Пол: Мужской
Сообщений: 1790


Skype: septdir


« Ответ #4 : 02.06.2017, 17:40:01 »

Тоже так думаю.Значит, данные, которые нужно менять, не вошли в $table?
Нет все проще com_fields там нет изначально. он же не относиться к #__content
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4079


« Ответ #5 : 02.06.2017, 17:44:39 »

А что за com_fields? Он не использует JModelAdmin?
Записан
b2z
Support Team
*****

Репутация: +734/-0
Offline Offline

Пол: Мужской
Сообщений: 7725


Разраблю понемногу


« Ответ #6 : 02.06.2017, 17:52:34 »

А откуда появляются данные полей в onContentAfterSave? Речь о своём компоненте.
Записан
Septdir
Практически профи
*******

Репутация: +76/-3
Offline Offline

Пол: Мужской
Сообщений: 1790


Skype: septdir


« Ответ #7 : 02.06.2017, 18:02:57 »

А откуда появляются данные полей в onContentAfterSave? Речь о своём компоненте.
Почти о любом, если быть точнее  legaсy JModelAdmin и новых доп полях. Все функции для плагинов области fields я тоже перерыл
В своем то я бы выкрутился. Но не лезть же в модель com_content.
Данные там в $data. Код сохранения можно глянуть в plugins/system/fields Оттуда value предаеться в model administrator/components/com_fields/models/field.php функция setFieldValue
Суть в том чтобы поменять значение поля еще до передачи в setFieldValue
При этом не ковыряясь в ядре и стандартных компонентах.
Пока оставил как есть перезапись. так что в целом то поле работает. Но как-то это не по феншуй
Записан
b2z
Support Team
*****

Репутация: +734/-0
Offline Offline

Пол: Мужской
Сообщений: 7725


Разраблю понемногу


« Ответ #8 : 02.06.2017, 18:11:04 »

Да, я тупанул. Конечно в $table полей не будет, данные же не в com_content хранятся... Ну тут да, только onContentAfterSave тогда.
Записан
Septdir
Практически профи
*******

Репутация: +76/-3
Offline Offline

Пол: Мужской
Сообщений: 1790


Skype: septdir


« Ответ #9 : 02.06.2017, 18:34:35 »

Да, я тупанул. Конечно в $table полей не будет, данные же не в com_content хранятся... Ну тут да, только onContentAfterSave тогда.
Ну в общем вышло примерно так.

* [170602] plg_fields_subform - 02.06.17.zip (3.15 Кб - загружено 3 раз.)
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet