Не работает хук

InstantCMS 2.X
#16 5 мая 2020 в 13:01
Lora,
Вы занимаетесь камланием в бубен, вместо того, чтобы понять, что делаете.
Смотрим запрос хука users_after_update
  1. list($profile, $old) = cmsEventsManager::hook('users_after_update', [$profile, $old]);
То есть вам всё правильно написали, входящие данные надо развернуть.
Входящие данные лучше обзовите как-нибудь по-другому. Например просто $data
  1. public function run($data){
  2. list($profile, $old) = $data;
Итак, профайл юзера получили.
Теперь, я так понимаю, Вы хотите обновить таблицу appointment_events.
Смотрим функцию update в модели:
  1. public function update($table_name, $id, $data, $skip_check_fields = false, $array_as_json = false)
То есть туда надо отправить имя таблицы, ид строки, которую будем править и данные, которые туда будем записывать:
  1. $this->cms_model->update('appointment_events',$profile['id'], array('title' => 'www'));
И меня смущает один нюанс. А точно ид нужной строки совпадает с ид профайла?
#17 5 мая 2020 в 13:47

И меня смущает один нюанс. А точно ид нужной строки совпадает с ид профайла?

Ris
Конечно нет). Так на самом деле.
  1. $this->cms_model->update('appointment_events','user_id='.$profile['id'],'title=www');
#18 5 мая 2020 в 16:22
Короче хз. Для редактирования профиля не хочет работать. Там есть ещё два события. Все перепробовал. Не работает. Такой же код для события из просмотра профиля, работает.
#19 5 мая 2020 в 16:48
Короче победил. С событием 'user_profile_update'. Думаю дело в том, что в остальных событиях нет параметра $_request, как true. Такой код, кому интересно.
  1. public function run($data){
  2. $this->db = cmsCore::getInstance()->db;
  3. $profile = array();
  4. $profile = $data;
  5. $this->db->query(
  6. "UPDATE cms_appointment_events
  7. SET title = 'ggg'
  8. WHERE user_id='".$data['id']."'"
  9. );
  10.  
  11. return ;
  12.  
  13. }
#20 5 мая 2020 в 16:49


И меня смущает один нюанс. А точно ид нужной строки совпадает с ид профайла?

Ris
Конечно нет). Так на самом деле.
  1. $this->cms_model->update('appointment_events','user_id='.$profile['id'],'title=www');

Lora

update только по id строки обновляет, если нужно привязаться к другому полю, например к user_id, тогда так
  1.  
  2. //$data массив полей и значений для апдйта
  3. $this->cms_model->filterEqual('user_id', $profile['id']);
  4. $this->cms_model->updateFiltered('appointment_events', $data);
  5.  
#21 5 мая 2020 в 19:00
AtlantisWeb, Да я уже понял. Решил так запрос написать, когда искал причину, что бы быть уверенным, что не в запросе дело)
#22 5 мая 2020 в 19:14
Остался ещё вопрос по синтаксису.
  1. list($profile, $old) = cmsEventsManager::hook('users_before_update', [$profile, $old]);
Это что? [$profile, $old] Раньше не встречал такого.Как я понимаю это должно означатьarray($profile, $old). Или что?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.