Перенести набор "моих друзей" из ленты активности в другие ТК

ЕСТЬ РЕШЕНИЕ
#1 30 января 2024 в 00:59

Здравствуйте. Кто подскажет, возможно ли перенести набор «Моих друзей» из ленты активности во все остальные типы контента? Чтобы фильтровать записи только от друзей. Спасибо.

Добавлено спустя 14 часов

Ребят, ну хоть кто-то дайте наводку, плиз. Хоть убей, не понимаю почему узкоспециализированные темы на форуме находят отклик, а действительно важные (а ведь фильтровать контент от друзей важно, ведь правда?) остаются без ответа. 

#2 30 января 2024 в 08:13

 Ostrova, самому никак не сделать. Но подтянуть фильтры для друзей в какой-то из наборов сторонним компонентом мне видится как несложная задача. Обязательно попробую, как будет время.

#3 30 января 2024 в 10:21

 Ostrova, самому никак не сделать. Но подтянуть фильтры для друзей в какой-то из наборов сторонним компонентом мне видится как несложная задача. Обязательно попробую, как будет время.

Zau4man

Насколько я пытался разобраться, в фронте ленты активности фильтры выводит этот код

  1. public function getDatasets(){
  2.  
  3. $user = $this->cms_user;
  4.  
  5. $datasets = array();
  6.  
  7. // Все (новые)
  8. $datasets['all'] = array(
  9. 'name' => 'all',
  10. 'title' => LANG_ACTIVITY_DS_ALL,
  11. );
  12.  
  13. if ($user->is_logged){
  14. // Мои друзья
  15. $datasets['friends'] = array(
  16. 'name' => 'friends',
  17. 'title' => LANG_ACTIVITY_DS_FRIENDS,
  18. 'filter' => function($model) use($user){
  19. return $model->filterFriendsAndSubscribe($user->id);
  20. }
  21. );
  22. // Только мои
  23. $datasets['my'] = array(
  24. 'name' => 'my',
  25. 'title' => LANG_ACTIVITY_DS_MY,
  26. 'filter' => function($model) use($user){
  27. return $model->filterEqual('user_id', $user->id);
  28. }
  29. );
  30. }

Что хорошо — он фильтрует записи не только от друзей, но и от людей, на которых подписан пользователь, если функция добавления в друзья отключена в настройках социальности сайта. 

Что плохо — прямая подстановка этого кода в фронт вывода контента не дает нам тот же результат)) Значок дата-сета появляется, страница выводится, но фильтрация не происходит. 

#4 31 января 2024 в 12:21

Ну же, коллективный разум, помогите разобраться 🙏 Почему фильтруется в ленте активности и не фильтруется в других ТК по этому методу? Не получает значение user_id ? 

#5 31 января 2024 в 14:26

Почему фильтруется в ленте активности и не фильтруется в других ТК по этому методу?

Ostrova

Всё фильтруется, просто наборы в ленте и в ТК по разному вставляются.

Вставьте сюда github.com/instantsoft/icms2/blob/master/system/controllers/content/frontend.php#L1527 этот код

  1. if (cmsUser::isLogged()){
  2. $datasets['subscribers'] = [
  3. 'id' => 100500,
  4. 'ctype_id' => $ctype['id'],
  5. 'name' => 'subscribers',
  6. 'title' => 'Подписчики',
  7. 'description' => '',
  8. 'ordering' => 1000,
  9. 'is_visible' => true,
  10. 'filters' => [
  11. [
  12. 'field' => 'id',
  13. 'condition' => 'lk',
  14. 'value' => false,
  15. 'callback' => function($model, $dataset){
  16. return $model->filterSubscribe(cmsUser::get('id'));
  17. }
  18. ]
  19. ],
  20. 'sorting' => [
  21. [
  22. 'by' => 'date_pub',
  23. 'to' => 'desc',
  24. ]
  25. ],
  26. 'index' => false,
  27. 'groups_view' => [],
  28. 'groups_hide' => [],
  29. 'seo_keys' => '',
  30. 'seo_desc' => '',
  31. 'seo_title' => '',
  32. 'seo_h1' => '',
  33. 'cats_view' => [],
  34. 'cats_hide' => [],
  35. 'max_count' => 0,
  36. 'target_controller' => '',
  37. 'list' => [
  38. 'show' => false,
  39. 'hide' => false,
  40. ],
  41. 'first_ds' => false,
  42. ];
  43. }
  44.  

Хотя в целом лучше для этого действия использовать хуки движка, но для проверки работоспособности «и так сойдет» ))

#6 2 февраля 2024 в 01:04

Почему фильтруется в ленте активности и не фильтруется в других ТК по этому методу?

Ostrova

Всё фильтруется, просто наборы в ленте и в ТК по разному вставляются.

Вставьте сюда github.com/instantsoft/icms2/blob/master/system/controllers/content/frontend.php#L1527 этот код

  1. if (cmsUser::isLogged()){
  2. $datasets['subscribers'] = [
  3. 'id' => 100500,
  4. 'ctype_id' => $ctype['id'],
  5. 'name' => 'subscribers',
  6. 'title' => 'Подписчики',
  7. 'description' => '',
  8. 'ordering' => 1000,
  9. 'is_visible' => true,
  10. 'filters' => [
  11. [
  12. 'field' => 'id',
  13. 'condition' => 'lk',
  14. 'value' => false,
  15. 'callback' => function($model, $dataset){
  16. return $model->filterSubscribe(cmsUser::get('id'));
  17. }
  18. ]
  19. ],
  20. 'sorting' => [
  21. [
  22. 'by' => 'date_pub',
  23. 'to' => 'desc',
  24. ]
  25. ],
  26. 'index' => false,
  27. 'groups_view' => [],
  28. 'groups_hide' => [],
  29. 'seo_keys' => '',
  30. 'seo_desc' => '',
  31. 'seo_title' => '',
  32. 'seo_h1' => '',
  33. 'cats_view' => [],
  34. 'cats_hide' => [],
  35. 'max_count' => 0,
  36. 'target_controller' => '',
  37. 'list' => [
  38. 'show' => false,
  39. 'hide' => false,
  40. ],
  41. 'first_ds' => false,
  42. ];
  43. }
  44.  

Хотя в целом лучше для этого действия использовать хуки движка, но для проверки работоспособности «и так сойдет» ))

Loadырь

Супер, спасибо, все работает ✌️

Только в моем случае поменял filterSubscribe на filterFriendsAndSubscribe

Буду разбираться с хуками.

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