Как отключить вызванный метод в объекте? 2.X

 
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1971
В INSTANTCMS2 в модели контента жестко, без всяких условий, включен фильтр скрытого контента:
Код PHP:
  1. $this->model->filterHiddenParents();
Мне требуется показывать контент из закрытых групп участникам этих групп.
Для этого в хуке content_list_filter я добавляю в модель выборку из скрытых групп, в которых состоит пользователь:
Код PHP:
  1. $model->filterOr()->filterIn('parent_id', $groups_array);
Но вот этот filterOr() приводит к тому, что в выборку попадает весь контент из этих групп, без фильтрации.
Это приходится корректировать при помощи различных костылей и прочих извращений.
Гораздо лучший результат был бы, если бы можно было каким-нибудь образом отключить фильтрацию скрытого контента, а потом фильтровать контент нормальным образом, без filterOr().

Пробовал различные действия "в лоб" типа $model->filterHiddenParents() = false и unset($model->filterHiddenParents()) smile
Все это, конечно приводит к ошибке Fatal error: Can't use method return value in write context in ...
Пробовал преобразовывать модель в массив, удалять элемент массива, а потом обратно преобразовывать в объект - как-то плохо обратно преобразовывается.

Есть, конечно, кардинальный метод, просто удалить фильтр скрытого во всех нужных файлах, но не хотелось изменять системные файлы.
Кто что может посоветовать? Или жесткий хак неизбежен?
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1334
Сбросьте все фильтры и задайте нужные заново
Код PHP:
  1. $model->resetFilters();
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1971
r2,
Пробовал.
Приходится вытаскивать в хук все содержимое фронтенда и виджетов.
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4088
filterStart()->
// тут цепочка методов
filterEnd()->

см. пример тут /system/controllers/content/hooks/cron_publication.php
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1971
Fuze,
Увы, не понял, как этим пользоваться.
filterStart()->
// тут цепочка методов
filterEnd()->
Просто вставляет скобки вокруг цепочки. WHERE (i.is_parent_hidden IS NULL) никуда не девается.
Пробовал
Код PHP:
  1.  
  2. $model->filterOr();
  3. $model->filterStart();
  4. $model->filterIn('parent_id', $gro);
  5. $model->filterEnd()
Результат тот же самый, как и без старт-эндов. При просмотре постов пользователя выводятся все посты из групп, которые в массиве $gro
==========================================================

А вообще, если все-таки удалить $model->filterHiddenParents(); из нужных файлов и сделать так:
Код PHP:
  1. $model->filterStart();
  2. $model->filterHiddenParents();
  3. $model->filterOr();
  4. $model->filterIn('parent_id', $gro);
  5. $model->filterEnd();
то все работает во всех местах, так как нужно! v
Редактировалось: 2 раз (Последний: 30 сентября 2017 в 14:41)
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.