Найти тему
DEVmemo.RU

1C-Битрикс. Пропадают комментарии из html: решение.

Оглавление

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

Описание "бага"

При разработке раздела для сайта столкнулся с проблемой: "На странице со статьей (конкретно Wiki-страница) есть компонент WIKI.DISCUSSION.

WIKI.DISCUSSION - отвечает за вывод комментариев к странице, для вывода комментариев компонент использует FORUM.TOPIC.REVIEWS.

При открытии страницы комментарии подгружаются, но при добавлении нового комментария "отрисованные" комментарии стираются из html страницы. Такая же ситуация и при пагинации комментариев. Но если мы разлогинимся на сайте, то все работает корректно.

Решение

В ходе "раскопок" выяснил, что проблема заключается в парсинге html! Зачем в Битрикс используют парсинг html страницы - неясно, но это так.

Парсинг происходит в файле component_epilog.php шаблона компонента FORUM.TOPIC.REVIEWS с использованием CForumSimpleHTMLParser(). Документации по CForumSimpleHTMLParser() у Битрикса нет (или я не нашел), поэтому для решения проблемы заменим его на свой парсер.

В качестве парсера я буду использовать SimpleHTML DOM, он идеально подходит для этого. Скачиваем библиотеку и располагаем файл simple_html_dom.php по пути:

*ваш сайт*/local/php_interface/lib/simple_html_dom.php.

Теперь немного модифицируем файл component_epilog.php:

  • Подключим библиотеку: require_once($_SERVER ["DOCUMENT_ROOT"] . "/local/php_interface/lib/simple_html_dom.php");
  • Инициализируем: $html = new simple_html_dom();
  • Загрузим html: $html->load($response);
  • Найдем блочный элемент <div> содержащий список комментариев. Переберем массив комментариев и запишем в строку:
foreach ( $html->find('div[data-bx-role=messages]') as $article ) {
$messages = $messages . $article;
}
  • Произведем замену в массиве $JSResult["data']: 'messages' => $messages,

Если все сделано правильно работа комментариев восстановится.