Источник изображения обложки: Source
ИнформацияФорк статьи с Dzen
Если Вы столкнулись с проблемой когда при добавлении комментария или при пагинации комментариев из 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,
Если все сделано правильно работа комментариев восстановится.
Готовый файл component_epilog.php
можно скачать на boosty.to