Если Вы столкнулись с проблемой когда при добавлении комментария или при пагинации комментариев из 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,
Если все сделано правильно работа комментариев восстановится.