Комментарии в ленте активности

983
Сто раз на форуме поднималась тема про сведение событий на сайте и комментариев в один виджет.
Многие (и я в том числе) пытались заносить в ленту активности новые события при добавлении комментария, но этот метод имеет несколько недостатков: "распухание" таблицы cms_activity и появление в ленте активности битых ссылок при удалении комментариев.
Но в файле \system\controllers\activity\widgets\list\widget.php есть вызов хука activity_before_list, который позволяет решить задачу без правки системных файлов.

В результате, после установки хука мы имеем следующую ленту активности, в которой в одном списке отображаются и события на сайте и комментарии:
Комментарии в ленте активности

Если нужно отключить отображение комментариев в ленте активности, достаточно отключить хук в админке.
Панель управления - Компоненты - Управление событиями. Найти событие activity_before_list и убрать с него галочку.
Установка хука стандартным способом из админки.

Скачать дополнение

.
[Неактуально]Редактор с настройками | [Неактуально] Информирование пользователей об окончании срока публикации.
Комментарии (10)
@SmartControl 9 сентября 2018 в 03:59 +3
Поправьте в установщике (переменная $item затесалась)
Код PHP:
  1. $comment['description'] = !empty($comment['description']) ?
  2. $item['description'] :
И такое решение работает только на первой странице Ленты.. На остальных оно работает некорректно - сверху всегда будут выводиться комментарии (потому что комментарии не пролистываются).

И можно форматирование даты коммента добавить (2018-09-04 09:05:30 => 5 дней назад).
И еще момент - в пагинации выводится подпись "Показаны 1-15 из 42" => а реально с комментами выводится больше.

Все-таки для красивого варианта нужно добавлять комментарии в таблицу ленты активности, так же как и остальные события.
Ris 9 сентября 2018 в 10:03 0
Спасибо, исправил.
И такое решение работает только на первой странице Ленты
Это вообще решение не для ленты, а для виджета. Об этом написано в первой строке поста.
Спасибо, что обратили внимание на то, что этот хук срабатывает и в ленте.
Отключил подгрузку комментариев в ленту активности.
Архив перезалит.
Capitan 9 сентября 2018 в 12:13 0
А можно ли сделать вот такое.
Добавляет комментарий к (а тут название типа контента) Общественный анализ марсианского опыта жизни
Ris 9 сентября 2018 в 14:18 0
Спойлер
Zau4man 9 сентября 2018 в 19:48 0
На мой взгляд, решение костыльное.

"распухание" таблицы cms_activity

она таки "распухнет" до тех же размеров, но несколько позже.

Надо комплекс хуков, отслеживающих "добавление в ленту при добавлении комментария" и "удаление из ленты" при удалении комментария, материала и т.п.
Ris 9 сентября 2018 в 22:28 0
она таки "распухнет" до тех же размеров, но несколько позже.
For example:
Код SQL:
  1. Отображение строк 0 - 24 (3432 всего, Запрос занял 0.0057 сек.) [subject_id: ... - ...]
  2. SELECT * FROM `cms_activity` ORDER BY `subject_id` ASC
Код SQL:
  1. Отображение строк 0 - 24 (1029009 всего, Запрос занял 0.0029 сек.) [date_pub: 2018-09-09 22:18:07... - 2018-09-09 21:24:46...]
  2. SELECT * FROM `cms_comments` ORDER BY `date_pub` DESC
То есть если бы комментарии дублировались в активность, там было бы 1032441 строк.
Не находите, что между 3432 и 1032441 есть кое-какая разница?
На мой взгляд, решение костыльное.
Да, решение костыльное и подходит только для виджета на главной странице. Но я попробую в хуке одним запросом достать данные сразу из двух таблиц. Если у Вас есть мысли по этому поводу - излагайте. Сами видите, что с моим количеством комментариев, дублировать их в активность - вообще не вариант.
@SmartControl 9 сентября 2018 в 22:53 0
Не находите, что между 3432 и 1032441 есть кое-какая разница?
С одной стороны логика говорит что разница есть, а с другой выборка по мильону то в два раза быстрее у вас в примере)

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

В профиле на вкладке комменты тоже добавляются в ленту, что неправильно (по крайней мере не все должны добавляться).. Так что может все-таки рассмотреть вариант с добавлением их в ленту. А ленту можно подчищать раз в какое-то время (архивировать или просто чистить).
Ris 9 сентября 2018 в 23:04 0
а с другой выборка по мильону то в два раза быстрее у вас в примере)
В комментариях ордер бай дата пуб, на этом имеется хороший индекс, а на сабдект айди в активности индекса нет. smile
В профиле на вкладке комменты тоже добавляются в ленту, что неправильно
Спасибо, сейчас уничтожу.
Александр 20 февраля 2019 в 19:21 0
а скачать нельзя, ссылка битая
Ris 20 февраля 2019 в 19:46 0