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

Источник изображения обложки: 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:

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

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

Готовый файл component_epilog.php можно скачать на boosty.to

1C-Битрикс. Пропадают комментарии из html: решение
https://devmemo.ru/posts/bitrix-propadayut-kommentarii-iz-html-reshenie/
Автор
Артём Плеханов
Опубликовано
2024-03-22
Лицензия
CC BY-NC-SA 4.0