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

InstantCMS 2.X
#1 30 сентября 2017 в 09:47
В INSTANTCMS2 в модели контента жестко, без всяких условий, включен фильтр скрытого контента:
  1. $this->model->filterHiddenParents();
Мне требуется показывать контент из закрытых групп участникам этих групп.
Для этого в хуке content_list_filter я добавляю в модель выборку из скрытых групп, в которых состоит пользователь:
  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 ...
Пробовал преобразовывать модель в массив, удалять элемент массива, а потом обратно преобразовывать в объект — как-то плохо обратно преобразовывается.

Есть, конечно, кардинальный метод, просто удалить фильтр скрытого во всех нужных файлах, но не хотелось изменять системные файлы.
Кто что может посоветовать? Или жесткий хак неизбежен?
#2 30 сентября 2017 в 09:53
Сбросьте все фильтры и задайте нужные заново
  1. $model->resetFilters();
#3 30 сентября 2017 в 10:01
r2,
Пробовал.
Приходится вытаскивать в хук все содержимое фронтенда и виджетов.
#4 30 сентября 2017 в 11:35
filterStart()->
// тут цепочка методов
filterEnd()->

см. пример тут /system/controllers/content/hooks/cron_publication.php
#5 30 сентября 2017 в 13:00
Fuze,
Увы, не понял, как этим пользоваться.
filterStart()->
// тут цепочка методов
filterEnd()->
Просто вставляет скобки вокруг цепочки. WHERE (i.is_parent_hidden IS NULL) никуда не девается.
Пробовал
  1.  
  2. $model->filterOr();
  3. $model->filterStart();
  4. $model->filterIn('parent_id', $gro);
  5. $model->filterEnd()
Результат тот же самый, как и без старт-эндов. При просмотре постов пользователя выводятся все посты из групп, которые в массиве $gro
==========================================================

А вообще, если все-таки удалить $model->filterHiddenParents(); из нужных файлов и сделать так:
  1. $model->filterStart();
  2. $model->filterHiddenParents();
  3. $model->filterOr();
  4. $model->filterIn('parent_id', $gro);
  5. $model->filterEnd();
то все работает во всех местах, так как нужно! v
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.