Хак: добавление комментариев в ленту активности

+13
2.44K
Всем привет!

Решил выложить свою мини-доработку по добавлению комментария в ленту активности.
Лично по мне не удобно, что комментарии отображаются в отдельном виджете и их отсутствие в ленте активности делает ее уж больно сухой.
Делал давно для одного проекта, сейчас попросили сделать для другого, поэтому размещаю здесь, чтобы было легче искать! ))

В общем, от нас требуется 3 небольших действия:
1. Запрос в БД
  1.  
  2. INSERT INTO `cms_activity_types` (`is_enabled`, `controller`, `name`, `title`, `description`) VALUES (1, 'comments', 'add.comment', 'Добавление комментария', 'добавляет комментарий к %s');
  3.  
Также, желательно, в таблице cms_activity поле subject_title сделать типом TEXT, чтобы комментарии не зарезались.
2. Редактируем файл /system/controllers/comments/actions/submit.php для добавления и обновления комментария в ленте
в блоке if ($action=='update'){ после строчки: $comment_html = $content_html; добавляем:
  1.  
  2. // обновляем запись в ленте активности
  3. // Получаем модель целевого контроллера
  4. $target_model = cmsCore::getModel( $target_controller );
  5. // Получаем URL и заголовок комментируемой страницы
  6. $target_info = $target_model->getTargetItemInfo($target_subject, $target_id);
  7. if ($target_info){
  8. cmsCore::getController('activity')->updateEntry('comments', "add.comment", $comment_id, array(
  9. 'user_id' => $user->id,
  10. 'subject_title' => '<a href="/'.$target_info['url']..'#comment_'.$comment_id'">'.$target_info['title'].'</a><p>'.$content_html.'</p>',
  11. 'subject_id' => $comment_id,
  12. ));
  13. }
  14.  
и в блоке if ($action=='add'){ после строки $comment_id = $this->model->addComment(cmsEventsManager::hook('comment_before_add', $comment));
добавляем:
  1.  
  2. // добавляем запись в ленту активности
  3. cmsCore::getController('activity')->addEntry('comments', "add.comment", array(
  4. 'user_id' => $comment['user_id'],
  5. 'subject_title' => '<a href="/'.$comment['target_url'].'#comment_'.$comment_id.'">'.$comment['target_title'].'</a><p>'.$comment['content_html'].'</p>',
  6. 'subject_id' => $comment_id,
  7. ));
  8.  
3. Редактируем файл /system/controllers/comments/actions/delete.php для удаления записи из ленты при удалении комментария
после строки: $this->model->deleteComment($comment['id'], (!$is_comment_child && cmsUser::isAllowed('comments', 'delete', 'full_delete', true)));
добавляем:
  1.  
  2. // удаляем запись в ленте активности
  3. cmsCore::getController('activity')->deleteEntry('comments', "add.comment", $comment['id']);
  4.  
Если что-то забыл, то допишу! Всех хорошего дня!
+1
Val Val 8 лет назад #
А почему не захотели юзать соответствующие хуки ('comment_before_update', 'comment_before_add', 'comments_after_delete' или 'comments_after_hide')?
0
irbis irbis 8 лет назад #
Я с хуками еще не работал, когда писал доработку, даже не подумал об этом.
Если у кого есть желание, перепишите на хуки и выложите. Будет полезно сообществу, самому лень переделывать smile
0
Sam Hain Sam Hain 7 лет назад #
В 2.7.1 не пашет.
0
Нико Нико 6 лет назад #
Как сделать это в новых версиях ?

Еще от автора

Компонент "Совместные покупки"
Всем привет! Уже как год лежит готовый компонент для организации "Совместных покупок".
Хак: поворот фото в Фотоальбомах
Всем привет! Давно ничего не писал, как обычно нет на все времени.
Хак: Умное Кеширование и Версионность в Javascript/CSS (2.x)
Всем привет! Аналогично недавно выложенному хаку Хак: Умное Кеширование и Версионность в Javascript/CSS (1.x) предлагаю доработку для 2-ой ветки!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.