Пропадает звездный рейтинг при отработке фильтра товаров, почему?
Приветствую, кто подскажет как решить проблему: при отработке фильтра слева e-clothes.ru/shop/ пропадает звездный рейтинг в товарах prnt.sc/19ffnh1, рейтинг выведен с помощью снипета, они как бы затираются после ajax, как решить, куда копать?
Комментарии: 20
Как-то так наверно.
$(document).on('mse2_load', function(e, data) {
$('.stars').stars();
});
спасибо, не помогло к сожалению( хм блин
А где прописали? Что-то не увидел. Просто после обновления фильтра, должен запустится скрипт, который как раз пересчитывает эти звезды.
вот сейчас смотрите, я снова вставил… я просто вставил проверил и удалил
Дайте ссылку куда вставили. Рекомендую сюда вставить, чтобы потом не искать:
/custom/my/js/main.js
/custom/my/js/main.js
при вставке когда звезды исчезли
У вас свой фильтр стоит, не обратил внимание:
$(document).on('pdopage_load', function(e, data) {
$('.stars').stars();
});
Функцию тоже не нужно было заменять, просто ниже этот код поставить.
отлично, только закрашенные звезды все равно пропадают, за это и отвечает снипет который добавляет среднюю оценку prnt.sc/19fs65r, фильтр почему то сбрасывает все значения в ноль
в коде чанка:
<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).")"
));
затирается имено это
$modx->getPlaceholder('id')
в снипете, когда туда ставлю просто айди товара 20 к примеру, то все норм <?php
$d1 = $id;
сделал prnt.sc/19fvp39, не помогло(
если выбрать одного производителя и товар у него один то рейтинг отрабатывает норм, страно, есть еще идеи? prnt.sc/19g09uh
Видимо кэш или не правильно определяет id.
ок, спс, разобрался, вся проблема в этом участке кода в снипете:
$modx->setPlaceholders(array(
'rating_count' => $middle,
'rating' => $result,
'ratingCount' => "(".count($all).")"
));
заменил его на просто return $middle;
, не знаю насколько это правильно, но работает
Все правильно. Нужно возвращать return
спасибо за помощь!!!
Не очень лучший способ подтягивать рейтинг. При большом кол-ве товаров, это точно будет тормозить. Добавьте лучше поле в карточку товара, в которой будет хранится рейтинг. А при добавление или удалении коммента, этот бы рейтинг пересчитывался.
ок спс, попробую
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.