Перейти к содержимому


Фотография
- - - - -

Поменять имя материала EVENT


Лучший Ответ SmetDenis , 11 February 2016 - 19:03

Добрый день,

 

Почти все правильно, только стоит обратить на эти моменты

 

6z63_200x0.png

 

 

onAfterInitialise - метод Joomla, который будет вызван сразу после загрузки Joomla

register('plgSystemZooautoname'); - регистрируем класс для вызова в нем методов-событий

 

item:save - вызывается до сохранения в базу

item:saved - материал уже сохранен и изменения $item не попадут в базу.

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 20

#1 alexmixaylov

alexmixaylov

Отправлено 05 February 2016 - 14:35

нужно автоматически сформировать код, чтобы потом использовать его в имени элемента

 

код состоит из ID материала и символа

 

какой метод правильно использовать в  jbevent.item

перед сохранением ID еще не существует, я так понимаю

получается что это нужно делать это во время сохранения или после него

 

на данный момент там есть  метод saved

 

можно ли использовать что то вроде afterSave()  ?

 

и как правильно записать $item->name = $newname; - такой способ вроде не работает

 


  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 05 February 2016 - 18:30

здравствуйте alexmixaylov, событий  до и после сохранения в Zoo нет, поэтому необходимо использовать событие saved.

После того как вы изменили свойство(т.е  имя) у объекта вам необходимо сделать пере сохранение.

$this->app->table->item->save($item);

  • 0
Изображение
 

#3 alexmixaylov

alexmixaylov

Отправлено 05 February 2016 - 18:48

$this здесь не работает

 

если я делаю 

app->table->item->save($item);

то процесс зацикливается

 

сохраняем item 

но когда он сохраняется он должен опять пересохранится и так бесконечно

в public static function saved($event)  это делать нельзя - нужно делать только после сохранения


  • 0

#4 Cheren-dow

Cheren-dow

Отправлено 05 February 2016 - 19:21

alexmixaylov, уточню у Дениса что можно сделать.


  • 0
Изображение
 

#5 alexmixaylov

alexmixaylov

Отправлено 05 February 2016 - 19:43

спасибо большое за помощь

я добросовестно перечитал мануал, но некоторые вещи выше моих сил :)


  • 0

#6 Cheren-dow

Cheren-dow

Отправлено 05 February 2016 - 19:57

alexmixaylov, давно не пользовался сам событием saved - так же зацикливаюсь.


  • 0
Изображение
 

#7 alexmixaylov

alexmixaylov

Отправлено 08 February 2016 - 09:53

UP


  • 0

#8 SmetDenis

SmetDenis

Отправлено 08 February 2016 - 14:36

Последних версиях ZOO есть два событий save и saved
Первый вызывается до фактической записи в базу данных, второй после.
Соответственно, если в saved вызвать item->save($item) то будет рекурсия.
Поэтому стоит попробовать 'item:save'

Чтобы проверить если ли у вас в ZOO это событие, посмотрите тут
administrator\components\com_zoo\tables\item.php
p0y8_200x0.png

В этом случае, чтобы не было цикла, не нужно вызывать save() в вашем событии. А только изменить объект материала.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#9 alexmixaylov

alexmixaylov

Отправлено 08 February 2016 - 14:47

 

В этом случае, чтобы не было цикла, не нужно вызывать save() в вашем событии. А только изменить объект материала.

 

я в методе saved() 

пытаюсь изменить объект $item->name = $newName;

изменения не сохраняются к сожалению


Сообщение отредактировал alexmixaylov: 08 February 2016 - 14:48

  • 0

#10 SmetDenis

SmetDenis

Отправлено 08 February 2016 - 14:56

saved вызывается после записи в базу.

save() в наших событиях пока нету, т.к
- он появился относительно недавно
- он нам не нужен

Правильный вариант подключится к item:save через свой плагин Joomla
Плагин можно сделать на пример от YT ZOO
plugins\system\zooevent\zooevent.php
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.





Click to return to top of page in style!