Пропадает звездный рейтинг при отработке фильтра товаров, почему?

Приветствую, кто подскажет как решить проблему: при отработке фильтра слева e-clothes.ru/shop/ пропадает звездный рейтинг в товарах prnt.sc/19ffnh1, рейтинг выведен с помощью снипета, они как бы затираются после ajax, как решить, куда копать?
дмитрий
08 июля 2021, 10:03
modx.pro
1
328
0

Комментарии: 20

Роман
08 июля 2021, 10:29
0
Как-то так наверно.
$(document).on('mse2_load', function(e, data) {
	$('.stars').stars();
});
    дмитрий
    08 июля 2021, 10:36
    0
    спасибо, не помогло к сожалению( хм блин
      Роман
      08 июля 2021, 10:40
      0
      А где прописали? Что-то не увидел. Просто после обновления фильтра, должен запустится скрипт, который как раз пересчитывает эти звезды.
        дмитрий
        08 июля 2021, 10:42
        0
        вот сейчас смотрите, я снова вставил… я просто вставил проверил и удалил
        дмитрий
        08 июля 2021, 10:43
        0
        при вставке когда звезды исчезли
          Роман
          08 июля 2021, 10:52
          0
          У вас свой фильтр стоит, не обратил внимание:
          $(document).on('pdopage_load', function(e, data) {
          	$('.stars').stars();
          });
          Функцию тоже не нужно было заменять, просто ниже этот код поставить.
            дмитрий
            08 июля 2021, 10:59
            0
            отлично, только закрашенные звезды все равно пропадают, за это и отвечает снипет который добавляет среднюю оценку prnt.sc/19fs65r, фильтр почему то сбрасывает все значения в ноль
              дмитрий
              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, 11:05
                0
                затирается имено это
                $modx->getPlaceholder('id')
                в снипете, когда туда ставлю просто айди товара 20 к примеру, то все норм
                  Роман
                  08 июля 2021, 11:10
                  0
                  <?php
                  $d1 = $id;
                    дмитрий
                    08 июля 2021, 11:15
                    0
                    сделал prnt.sc/19fvp39, не помогло(
                      дмитрий
                      08 июля 2021, 11:37
                      0
                      если выбрать одного производителя и товар у него один то рейтинг отрабатывает норм, страно, есть еще идеи? prnt.sc/19g09uh
                        Роман
                        08 июля 2021, 11:52
                        0
                        Видимо кэш или не правильно определяет id.
                        дмитрий
                        08 июля 2021, 12:03
                        0
                        ок, спс, разобрался, вся проблема в этом участке кода в снипете:
                        $modx->setPlaceholders(array(
                           'rating_count' => $middle,
                           'rating' => $result,
                           'ratingCount' => "(".count($all).")"
                        ));
                        заменил его на просто
                        return $middle;
                        , не знаю насколько это правильно, но работает
                        Роман
                        08 июля 2021, 13:10
                        0
                        Все правильно. Нужно возвращать return
                        дмитрий
                        08 июля 2021, 13:30
                        0
                        спасибо за помощь!!!
                  Роман
                  08 июля 2021, 11:10
                  0
                  Не очень лучший способ подтягивать рейтинг. При большом кол-ве товаров, это точно будет тормозить. Добавьте лучше поле в карточку товара, в которой будет хранится рейтинг. А при добавление или удалении коммента, этот бы рейтинг пересчитывался.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    20