Всего 125 673 комментария

дмитрий
08 июля 2021, 12:03
0
ок, спс, разобрался, вся проблема в этом участке кода в снипете:
$modx->setPlaceholders(array(
   'rating_count' => $middle,
   'rating' => $result,
   'ratingCount' => "(".count($all).")"
));
заменил его на просто
return $middle;
, не знаю насколько это правильно, но работает
Роман
08 июля 2021, 11:52
0
Видимо кэш или не правильно определяет id.
дмитрий
08 июля 2021, 11:37
0
если выбрать одного производителя и товар у него один то рейтинг отрабатывает норм, страно, есть еще идеи? prnt.sc/19g09uh
Сергей Шлоков
08 июля 2021, 11:15
0
будем благодарны вам за публикацию решения
Это баг и проявляется он только на сайтах с большим количеством товаров. Решение простое — править.
Роман
08 июля 2021, 11:10
0
Не очень лучший способ подтягивать рейтинг. При большом кол-ве товаров, это точно будет тормозить. Добавьте лучше поле в карточку товара, в которой будет хранится рейтинг. А при добавление или удалении коммента, этот бы рейтинг пересчитывался.
Павел Романов
08 июля 2021, 11:08
+1
Тут Shopkeeper вообще не при чем.
Скорее всего у Вас установлен pdoTools и включен шаблонизатор Fenom на страницах.
Добавьте пробел после открывающей фигурной скобки:
&where=`{ "template":9 }`

Но лучше используйте pdoResources:
[[!pdoResources?
    &parents=`319`
    &templates=`9`
    &tpl=`product`
    &includeTVs=`price,image,opisanie`
    &limit=`20`
]]
дмитрий
08 июля 2021, 11:05
0
затирается имено это
$modx->getPlaceholder('id')
в снипете, когда туда ставлю просто айди товара 20 к примеру, то все норм
дмитрий
08 июля 2021, 11:00
0
в коде чанка:
<div><span class="reviews_param_value stars" data-rating="[[!Test2? &id=`[[+id]]`]][[+rating_count]]" data-num-stars="5"></span></div>
            </div>
снипет:
<?php
$d1 = $modx->getPlaceholder('id');



$sql = "SELECT C.properties AS prop FROM modx_tickets_comments C LEFT JOIN modx_tickets_threads D
ON C.thread=D.id WHERE D.resource = ".$d1;


$q = $modx->prepare($sql);
$q->execute(array(0));
$arr = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($arr as $arr_one) {
    $tmp = json_decode($arr_one["prop"], true)["starrating"];
    $all[] = $tmp;
}
$middle = number_format(array_sum($all)/count($all), 1, '.', '' );
if (count($all) == 0) {
   $result = ""; 
} else {
$result = '<span itemprop="review" itemscope itemtype="http://data-vocabulary.org/Review-aggregate"><span class="stars"
 itemprop="rating">'.$middle.'</span>Рейтинг '.$middle.' на основе <span itemprop="count">'.count($arr).'</span> отзывов</span>';


}

$middle = $middle== "nan" ? 0 : $middle;



$modx->setPlaceholders(array(
   'rating_count' => $middle,
   'rating' => $result,
   'ratingCount' => "(".count($all).")"
));
дмитрий
08 июля 2021, 10:59
0
отлично, только закрашенные звезды все равно пропадают, за это и отвечает снипет который добавляет среднюю оценку prnt.sc/19fs65r, фильтр почему то сбрасывает все значения в ноль
Роман
08 июля 2021, 10:52
0
У вас свой фильтр стоит, не обратил внимание:
$(document).on('pdopage_load', function(e, data) {
	$('.stars').stars();
});
Функцию тоже не нужно было заменять, просто ниже этот код поставить.
Роман
08 июля 2021, 10:44
0
Дайте ссылку куда вставили. Рекомендую сюда вставить, чтобы потом не искать:
/custom/my/js/main.js
дмитрий
08 июля 2021, 10:42
0
вот сейчас смотрите, я снова вставил… я просто вставил проверил и удалил
Роман
08 июля 2021, 10:40
0
А где прописали? Что-то не увидел. Просто после обновления фильтра, должен запустится скрипт, который как раз пересчитывает эти звезды.
Роман
08 июля 2021, 10:38
+1
Посмотрите тут. Тема уже обсуждалась.
дмитрий
08 июля 2021, 10:36
0
спасибо, не помогло к сожалению( хм блин