Виджет контента показывает приватные записи групп

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X

Убрать из виджета на главной странице приватные записи групп

#1 14 мая 2024 в 17:27

Заметил что в виджет на главной странице попадают записи из закрытых групп, при переходе по ним сайт просит регистрацию, это не плохое решение, но хотелось бы что бы они небыли видны для гостей и для пользователей которые не состоят в группе. 

У кого нибудь есть такое решение? Единственное что я нашел по форуму вот это решение с хуком 

instantcms.ru/forum/vidzhet-kontenta-pokazyvaet-privatnye-zapisi.html

Он работает, но гостям вообще не виден виджет новостей, а при авторизации все нормально виджет виден и новостей нет

#2 15 мая 2024 в 20:34

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

Изображение

И все. Мы его в виджете видим

Изображение

А юзеры, не состоящие в группе, не видят

Изображение

Сразу скажу, что группы не использую, тонкостей не знаю.

#3 16 мая 2024 в 00:34

Да, как вариант можно так сделать, но это нужно помечать каждый пост. В таком случае можно группу и не закрывать а управлять просто приватностью. 

Я иммею ввиду, что бы каждую новость так не помечать, можно просто закрыть группу и новости нигде не показываются не при просмотре категорий, не в поиске и т.д. пока ты не вступишь в нее. С этим проблем нет, все работает.

А вот в виджетах эти новости из закрытой группы все равно видны, что для гостей, что для пользователей и когда по ним перейти для гостей появляется авторизация, а тем кто авторизирован переходит в группу и пишет, что вы не являетесь участником и нужно вступить в группу.

Мне нужно, что бы эти новости небыли видны в виджете не гостям не пользователям пока они не вступят в эту закрытую группу

#4 16 мая 2024 в 10:19

 wantprikol, возможно баг. Откройте файл system\controllers\content\model.php

и примерно в строчке 1246 после кода

  1. if (!$this->privacy_filter_disabled) { $this->filterPrivacy(); }
  2. if (!$this->approved_filter_disabled) { $this->filterApprovedOnly(); }
  3. if (!$this->delete_filter_disabled) { $this->filterAvailableOnly(); }
  4. if (!$this->pub_filter_disabled) { $this->filterPublishedOnly(); }

добавьте строку

  1. if (!$this->hidden_parents_filter_disabled) { $this->filterHiddenParents(); }

по аналогии, как сделано несколькими строками выше в методе getContentItemsCount

т.е. у вас должен получиться блок

  1. if (!$this->privacy_filter_disabled) { $this->filterPrivacy(); }
  2. if (!$this->approved_filter_disabled) { $this->filterApprovedOnly(); }
  3. if (!$this->delete_filter_disabled) { $this->filterAvailableOnly(); }
  4. if (!$this->pub_filter_disabled) { $this->filterPublishedOnly(); }
  5. if (!$this->hidden_parents_filter_disabled) { $this->filterHiddenParents(); }

И все, виджет тоже будет фильтроваться точно также, как и список контента.

Добавлено спустя 1 минуту

А дальше надо смотреть новости релиза новой версии. Мб там поправят по-другому. А может быть это фича и так и должно быть...

Добавлено спустя 6 минут

Создал тикет на гитхабе. Теперь не потеряется github.com/instantsoft/icms2/issues/1503

#5 16 мая 2024 в 10:29

Приведу пример в скриншотах, есть закрытая группа

Изображение

В ней есть уже добавленные новости, в данном примере «фото», если просматривать сайт как гость или пользователь не состоящий в группе то в категории «фото» он этих новостей не увидит

Изображение

Если зайти на сайт как участник группы или администратор группы то эти новости для него в категории «фото» тоже не появятся, но он их увидит только если зайдет в группу 

Изображение

И вот в чем проблема, когда просматриваешь главную страницу на которой у меня стоит виджет фото эти новости из закрытой группы показываются для гостей, пользователей и администратора группы, хотя в других местах нет

Изображение

Может нужно использовать какой нибудь хук, что бы они скрывались от других пользователей

Добавлено спустя 8 минут

 wantprikol, возможно баг. Откройте файл system\controllers\content\model.php

и примерно в строчке 1246 после кода

  1. if (!$this->privacy_filter_disabled) { $this->filterPrivacy(); }
  2. if (!$this->approved_filter_disabled) { $this->filterApprovedOnly(); }
  3. if (!$this->delete_filter_disabled) { $this->filterAvailableOnly(); }
  4. if (!$this->pub_filter_disabled) { $this->filterPublishedOnly(); }

добавьте строку

  1. if (!$this->hidden_parents_filter_disabled) { $this->filterHiddenParents(); }

по аналогии, как сделано несколькими строками выше в методе getContentItemsCount

т.е. у вас должен получиться блок

  1. if (!$this->privacy_filter_disabled) { $this->filterPrivacy(); }
  2. if (!$this->approved_filter_disabled) { $this->filterApprovedOnly(); }
  3. if (!$this->delete_filter_disabled) { $this->filterAvailableOnly(); }
  4. if (!$this->pub_filter_disabled) { $this->filterPublishedOnly(); }
  5. if (!$this->hidden_parents_filter_disabled) { $this->filterHiddenParents(); }

И все, виджет тоже будет фильтроваться точно также, как и список контента.

А дальше надо смотреть новости релиза новой версии. Мб там поправят по-другому. А может быть это фича и так и должно быть...

Создал тикет на гитхабе. Теперь не потеряется github.com/instantsoft/icms2/issues/1503

Zau4man

Посмотрел эти строки на месте

Изображение

#6 16 мая 2024 в 11:37

 wantprikol, ниже смотрите. Я же указал номер строки...

#7 16 мая 2024 в 14:05

Прошу прощения за невнимательность, да это помогло, спасибо за помощь. Проблема решена, закрываю тему.

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.