Перехват системных событий icms2

#1 3 сентября 2014 в 12:10
Если кто-то делал, подскажите как) В частности, нужно отловить просмотр профиля пользователя (из другого контроллера, естественно) другим пользователем.
#2 3 сентября 2014 в 13:55
А подробнее?
#3 3 сентября 2014 в 14:10
Till, До маразма тривиальное решение, надо выводить в ленту всех кто зашел в какой-либо профиль ))
>Вася П смотрит профиль Иры К
Затем читаем ленту (любым контроллером) и вуаля… ))))))))))
#4 3 сентября 2014 в 14:44

А подробнее?

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

Till, До маразма тривиальное решение, надо выводить в ленту всех кто зашел в какой-либо профиль ))
>Вася П смотрит профиль Иры К
Затем читаем ленту (любым контроллером) и вуаля… ))))))))))

Какой-то костыль…
#5 3 сентября 2014 в 15:04
Till, Можно и без костылей, посмотри таблицу events
#6 3 сентября 2014 в 16:54

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

Till
Т.е. Вы хотите получать информацию о всех пользователях, которые посещали, например, Вашу страницу?
#7 3 сентября 2014 в 17:29

Т.е. Вы хотите получать информацию о всех пользователях, которые посещали, например, Вашу страницу?

Примерно так.
#8 3 сентября 2014 в 22:00

подскажите как) В частности, нужно отловить просмотр профиля пользователя

Till
Примерно так же, как и в 1.x.

В экшене показа профиля (/system/controllers/users/actions/profile.php) есть хук:
  1. $profile = cmsEventsManager::hook('users_profile_view', $profile);
В файле manifest.php в папке вашего контроллера вы объявляете перехват этого хука:
  1. <?php
  2. return array(
  3. 'hooks' => array(
  4. 'users_profile_view',
  5. )
  6. );
Создаете папку /system/controllers/example/hooks и в ней файл users_profile_view.php (где example — название вашего контроллера). Название файла совпадает с названием хука.

В этом файле пишете обработчик:
  1. <?php
  2. class onExampleUsersProfileView extends cmsAction {
  3.  
  4. // этот метод выполняется при вызове хука
  5. // он получает на вход тот параметр, который
  6. // был передан при вызове cmsEventManager::hook(...)
  7. public function run($profile){
  8.  
  9. $user = cmsUser::getInstance();
  10.  
  11. // Текущий пользователь: $user->id
  12. // смотрит профиль: $profile['id']
  13.  
  14. // Отсюда вы можете обращаться к своей модели:
  15. $this->model->doSomething();
  16.  
  17. // и к любому методу внутри frontend.php через $this:
  18. $this->myMethodFromFrontend();
  19.  
  20. // в конце обязательно возвращаете
  21. // входящий параметр обратно, чтобы другие
  22. // обработчики получили его дальше
  23. return $profile;
  24.  
  25. }
  26.  
  27. }
Название класса образуется из названия контроллера и хука (каждое слово с большой буквы), с приставкой on в начале.
#9 3 сентября 2014 в 22:22
Большое спасибо!) Пытался делать перехват по аналогии с другими контроллерами, но пропустил manifest.php
#10 4 сентября 2014 в 08:07
r2, огромное спасибо!!! Давно ждал подобного объяснения! dance
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.