Icms2: Обработчик событий (hook) перед вызовом списка контента

 
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1876
content_list_filter - хук вызывает перед вызовом списка контента.

Как обработать то что через него проходит? Что можно добавить или удалить из этого массива?

А вопрос собственно как добавить перед запросом дополнительный фильтр для запроса в бд?
Пока я справился хаком файла модели и в функцию getContentItems добавил $this->filterEqual('user_id', 1); чтобы отфильтровать по пользователю 1

А как это сделать через хук?
Дополнения для InstantCMS
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3905
kreator:
Как обработать то что через него проходит?
через него проходит массив $data в котором спрятаны
Код PHP:
  1. $ctype = $data[0];
  2. $model = $data[1];
kreator:
Что можно добавить или удалить из этого массива?
можно "всё" или "ничего" или что-то между ними. Зависит от поставленных задач и предполагаемых результатов.

kreator:
А как это сделать через хук?
Код PHP:
  1. $model->filterEqual('user_id', 1);
  2. $data[1] = $model; // эта строка возможно лишняя.
  3. return $data;
Редактировалось: 1 раз (Последний: 25 июня 2015 в 21:34)
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1876
Вариации с filterEqual() выдают белый экран с этим в логе:
Код PHP:
  1. Call to a member function filterEqual() on a non-object in.......
Что между правильно?

Код PHP:
  1. public function run($item){
  2.  
  3. ????????????
  4.  
  5. return $item;
  6.  
  7. }
Дополнения для InstantCMS
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1876
Вру. Работает. Вот так:
Код PHP:
  1. public function run($item){
  2.  
  3. $model = $item[1];
  4. $model->filterEqual('user_id', 2);
  5.  
  6. return $item;
  7.  
  8. }
Дополнения для InstantCMS
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4774
kreator:
content_list_filter
при формировании списка записей типа контента есть два хука, предназначенных как раз для фильтрации:
Код PHP:
  1. list($ctype, $this->model) = cmsEventsManager::hook("content_list_filter", array($ctype, $this->model));
  2. list($ctype, $this->model) = cmsEventsManager::hook("content_{$ctype['name']}_list_filter", array($ctype, $this->model));
content_list_filter и content_ТИПКОНТЕНТА_list_filter

В хук в обоих случаях передается массив данных типа контента и объект модели компонента "контент".

Если вы хотите для всех типов контента сделать что-либо, то имеет смысл использовать хук content_list_filter, если для конкретного, то соответственно второй.

В общем случае в хуке нужно сделать как то так:

Имеем: некий контроллер "fuze" smile
Хотим обработать хук "content_list_filter"

Создаем хук

Код PHP:
  1. class onFuzeContentListFilter extends cmsAction {
  2.  
  3. public function run($data){
  4.  
  5. list($ctype, $model) = $data;
  6.  
  7. $model->filterEqual('user_id', 1); // фильтруем по пользователю с id = 1
  8.  
  9. return array($ctype, $model);
  10.  
  11. }
  12.  
  13. }
Если же нужно уже в полученном массиве записей что-то исправить/удалить/дополнить, то использовать нужно хуки "content_before_list" или "content_ТИПКОНТЕНТА_before_list".

kreator:
Что можно добавить или удалить из этого массива
что угодно из того, что есть, unset() в помощь
Редактировалось: 2 раз (Последний: 25 июня 2015 в 22:46)
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.