Инструменты пользователя

Инструменты сайта


bitrix_comments:faq:review_button

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
bitrix_comments:faq:review_button [29/03/2026 16:13] adminbitrix_comments:faq:review_button [30/03/2026 14:15] (текущий) – старая версия восстановлена (29/03/2026 12:17) admin
Строка 1: Строка 1:
-======  🐘 PHP API ======+===== Не работает кнопка «Оставить отзыв», слетают стили, отзывы не обновляются =====
  
  
-=====  Работа с комментариями =====+**Описание проблемы**
  
 +При установке модуля «Универсальные отзывы, комментарии и рейтинги» на некоторых проектах наблюдаются следующие ошибки:
 +  * Слетают стили модуля при обновлении страницы
 +  * Кнопка «Оставить отзыв» не работает
 +  * Отзывы не отображаются сразу после добавления
  
-==== Добавление комментария =====+**Причина**
  
 +Чаще всего проблема возникает из-за подключения компонентов модуля в кешируемой области шаблона другого компонента.
  
-<code php> +Для оформления и реализации front-end логики компонента, в его шаблоне доступны не обязательные файлы 
-use Chililab\Comments\Comment;+  * style.css, который определяет стили, необходимые данному шаблону 
 +  * script.js, который определяет и подключает скрипты, необходимые данному шаблону.
  
-$commentId = Comment::addComment( +Эти файлы подключаются при исполнении кода компонента. Однакоесли вызов одного компонента находится внутри другого, при отработке кеша вложенный компонент не вызывается, а значит его скрипты и стили не подключаются на странице.
-    $name,        // Имя автора +
-    $text,        // Текст комментария +
-    $parentId,    // ID родительского комментария (0 - корневой) +
-    $moderated  // Требуется ли модерация (bool) +
-    $active,      // Активен ли комментарий (bool) +
-    $url,         // URL страницы (false - текущая+
-    $created    // Дата создания (false - текущая) +
-    $siteId,      // ID сайта (false - текущий) +
-    $sendEvents,  // Отправка событий (bool) +
-    $iblockId,    // ID инфоблока (optional) +
-    $elementId    // ID элемента (optional) +
-); +
-</code> +
-=====  Удаление комментария =====+
  
 +Для компонентов нашего модуля это приводит к следующему:
 +  * Не подключаются скрипты и стили
 +  * Отзывы и комментарии кешируются
 +  * Новые отзывы не отображаются без сброса кеша
  
-<code php> +**Решение**
-// Удалить один комментарий +
-Comment::deleteComment($id, $withChildren = false); +
- +
-// Удалить несколько комментариев +
-Comment::delete([$ids], $withChildren = false); +
-</code> +
- +
-==== Активация/Деактивация ====+
  
 +  * Вариант 1. (Не рекомендуется) Отключить кеш родительского компонента. Такой подход решает проблему, но ухудшает производительность страницы
 +  * Вариант 2. Вынести вызов компонента из кешируемой области шаблона в файл component_epilog.php родительского компонента. Этот вариант самый простой, но может не подойти в конкретном случае из-за несоответствия верстке.
 +  * Вариант 3. Буфферизация вывода шаблона родительского компонента с последующей заменой контента. Подробнее [[https://gdecider.github.io/articles-bx-inner-component.html|gdecider.github.io/articles-bx-inner-component.html]]
 +  * Вариант 4. Подходит только для комплексных компонентов. Вынести вызов компонента отзывов в из конкретного компонента в шаблон страницы. Например, для товара в каталоге нужно вынести вызов компонента комментариев из шаблона компонента catalog.element в файл в element.php шаблона комплексного компонента catalog. Подробный пример можно найти [[complex_components|в статье]]
 +  * Вариант 5. В вызов компонента комментариев добавить четвертым параметром переменную $component. Пример:
 <code php> <code php>
-Comment::activate([$ids]); +$APPLICATION->IncludeComponent('chililab:page.reviews.list', '', []$component);
-Comment::deactivate([$ids]);+
 </code> </code>
  
-==== Модерация ====+**Итог**
  
-<code php> +Для корректной работы компонента нужно учитывать особенности кеширования Битрикс
-Comment::setModerated([$ids]); +
-Comment::cancelModerated([$ids]); +
-</code>+
  
-==== Редактирование ==== 
  
-<code php> 
-Comment::edit([ 
-    $id1 => ['NAME' => 'Новое имя', 'TEXT' => 'Новый текст'], 
-    $id2 => ['TEXT' => 'Текст 2'], 
-]); 
-</code> 
- 
----- 
- 
-===== Работа с отзывами ===== 
- 
-==== Добавление отзыва ==== 
- 
-<code php> 
-use Chililab\Comments\Review; 
- 
-$reviewId = Review::add( 
-    $name,        // Имя автора 
-    $text,        // Текст отзыва 
-    $rating,      // Оценка (1-5) 
-    $recommend,   // Рекомендует ли товар (bool) 
-    $moderated,   // Требуется ли модерация (bool) 
-    $active,      // Активен ли отзыв (bool) 
-    $url,         // URL страницы (false - текущая) 
-    $created,     // Дата создания (false - текущая) 
-    $likes,       // Количество лайков (0) 
-    $dislikes,    // Количество дизлайков (0) 
-    $answer,      // Ответ администратора (false) 
-    $siteId,      // ID сайта (false - текущий) 
-    $sendEvents,  // Отправка событий (bool) 
-    $iblockId,    // ID инфоблока (optional) 
-    $elementId    // ID элемента (optional) 
-); 
-</code> 
- 
-==== Лайки и Дизлайки ==== 
- 
-<code php> 
-// Поставить лайк 
-Review::like($id); 
- 
-// Отменить лайк 
-Review::likeCancel($id); 
- 
-// Поставить дизлайк 
-Review::dislike($id); 
- 
-// Отменить дизлайк 
-Review::dislikeCancel($id); 
-</code> 
- 
-==== Удаление ==== 
- 
-<code php> 
-Review::deleteReview($id, $withChildren = false); 
-Review::delete([$ids]); 
-</code> 
- 
----- 
- 
-===== Работа с рейтингами ===== 
- 
-==== Добавление рейтинга ==== 
- 
-<code php> 
-use Chililab\Comments\Rating; 
- 
-// Для авторизованного пользователя 
-Rating::addCurrentUserRating($rating); 
- 
-// Для неавторизованного пользователя 
-Rating::addNotAutorazedRating( 
-    $url,       // URL страницы 
-    $rating,    // Оценка (1-5) 
-    $active,    // Активен ли рейтинг 
-    $siteId,    // ID сайта 
-    $iblockId,  // ID инфоблока (optional) 
-    $elementId  // ID элемента (optional) 
-); 
-</code> 
- 
-==== Получение рейтинга страницы ==== 
- 
-<code php> 
-// Получить рейтинг по URL 
-$pageRating = Rating::getPageRating(); 
- 
-// Получить рейтинг по инфоблоку и элементу 
-$pageRating = Rating::getPageRating($iblockId, $elementId); 
- 
-// Результат: 
-[ 
-    'AVG' => 4.5,     // Средний рейтинг 
-    'COUNT' => 10     // Количество голосов 
-] 
-</code> 
- 
-==== Текущий рейтинг пользователя ==== 
- 
-<code php> 
-$userRating = Rating::getCurrentUserRating(); 
-// Результат: ['ID' => 123, 'RATING' => 4, ...] 
-</code> 
- 
-==== Удаление ==== 
- 
-<code php> 
-Rating::delete([$ids]); 
-</code> 
bitrix_comments/faq/review_button.1774789997.txt.gz · Последнее изменение: admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki