Здравствуйте.
Вот в .theme есть код который задает переменную с количеством всех комментариев к ноде:
function sitetheme_preprocess_field__comment(&$variables) {
// Add a comment_count.
$variables['comment_count'] = count(array_filter($variables['comments'], 'is_numeric', ARRAY_FILTER_USE_KEY));
}
А можно подсчитать только комментарии первого уровня, и не считать ответы к ним ? Ну типа количество отзывов к товару нужно подсчитать, без ответов.
Комментарии
Думаю через views можно. Типа вывести коментарии, отфильтровать те, что без дочерних и подсчитать через агрегацию. Точных инструкций не дам. Нет у меня такого.
Через views я пробовал, можно. Я просто думал может есть что попроще. Еще хотел кнопку вверх в товаре вставить с количеством в commerce-product--full.html.twig. А тут так не получится.
Забыл что есть модуль twig tweak, тем более уже установлен на сайт. Он позволяет вывести любой views в ...html.twig:
{{ drupal_view('view_name', 'block_1') }}
Вот так и сделаю тогда.
Даже лучше вышло, добавил к отзывам (комментариям) поле списка выбора из пяти цифр 1, 2, 3, 4, 5.
Теперь можно оценку выбирать при добавлении отзыва. А во вьюс (включив агрегацию) кроме количества отзывов вывел среднее значение у этого нового поля. Там же и перезаписал поле чтобы в зависимости от оценки выводился либо красный, либо оранжевый, либо зеленый блок с оценкой.
До это искал подобный модуль, навозившись сутками с fivestar и им подобным, ничего путного не получалось. А тут так всё просто оказалось.
Еще не было возможности показать количество отзывов и среднюю оценку в тизере товара, так как нет такого функционала по выводу комментариев в тизере. Помог модуль EVA. К тому же view, который подсчитывает количество отзывов первого уровня и среднюю оценку, добавил вкладку EVA, выбрал тип сущности: Product.
В самом commerce-product--teaser.html.twig вывел уже поле EVA - {{ elements.reviews_stats_entity_view_1 }}
( выводится по шаблону: {{ elements.имя представления_машинное имя блока eva }} )
Вопрос исперчен, сам с собой поговорил, все довольны.