Какой рейтинг товаров использовать?

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

Из хотелок:
1) Работа с товарами в собственных таблицах. Те. нужно, чтобы все можно было оценивать.
2) Работа через Ajax, как вывод, так и голосование
3) Оптимальный расчет ретинга. Чтобы не тупил при большом количестве товаров.

Что пробовал:
— CSS Star rating — всем хорош, но нет Ajax.
— LexRating — есть аjax, хранит таблицу с IP — не уверен, что это правильное решение.
И насколько понял для расчета рейтинга тянет все оценки и внутри считает среднее(!), вместо того, чтобы хранить среднее и перезаписывать его при оценке. Т.е. если такой снипет, поместить в вызов getResources должно тормозить невероятно (теория, хотел бы знать как на практике)

Другого нет вроде бы ничего.
Николай
19 февраля 2017, 20:07
modx.pro
1 673
0

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

Иван Кизименко
19 февраля 2017, 23:32
+1
easyComm от этого модуля не подойдет?
    Николай
    19 февраля 2017, 23:46
    0
    По описанию он довольно мощен для моей задачи, да еще и pdoTools требует, а мне все это пока не надо.
    Или я что-то не так понял и можно только частями устанавливать?
      Воеводский Михаил
      20 февраля 2017, 00:07
      +2
      Если есть беспокойство о быстродействии, getResources необходимо выкинуть на помойку и заменить на pdoResources. То есть, одну из причин против easyComm уже устранили. То, что он «довольно мощен», тоже не причина. Сейчас требуется одно, а чуть позже требования расширяются. Так показывает практика.

      И еще:
      — LexRating <...>
      И насколько понял для расчета рейтинга тянет все оценки и внутри считает среднее(!), вместо того, чтобы хранить среднее и перезаписывать его при оценке.

      Это единственный способ расчета правильного среднего. Иначе как считать среднее при новой оценке? Как среднее между старой усредненной из тысячи и единственной новой? Представьте с точки зрения математики такой подход и увидите, что он всегда будет давать неправильные результаты.
        Николай
        20 февраля 2017, 09:39
        0
        Вместо getResources я использую быстрый getProducts, в pdoResources нет нужного мне функционала.

        Что касается среднего рейтинга, вы не поняли моей логики. Я предлагаю считать рейтинг в момент постановки оценки, а не в момент, когда нужно показать оценку товара.
        Ставит человек оценку, идет сложный процесс — вытягиваются все предыдущие оценки, рассчитывается среднее, записывается в базу. Но это разовые операции, оценки реже ставятся чем тянется значения рейтинга.
          Николай
          20 февраля 2017, 09:48
          0
          Кстати, вот вопрос, easyComm можно использовать в качестве комментариев к товарам.
          Но как быть с магазином, где товары постоянно обновляются? Например, удалился у меня товар, как отследить, чтобы и соответствующая ветка комментариев удалялась? Есть какая-то автоматическая чистка?
            Наумов Алексей
            20 февраля 2017, 09:53
            +1
            Есть, удалится все.
              Николай
              20 февраля 2017, 10:17
              0
              Удалится если товары ресурсы modx или для своих таблиц тоже работать будет?
                Наумов Алексей
                20 февраля 2017, 10:22
                +1
                Цепочка с сообщениями привязана к ресурсу, как только удалите ресурс — удалится и цепочка.

                Если у вас свои таблицы для товаров используются, то вам все равно придется сообщения привязать к некому ресурсу, например он может называется «Отзывы». У этого ресурса будет много цепочек, тогда чистить их нужно будет самостоятельно, небольшой плагинчик написать, в принципе ничего сложного.
      Максим Кузнецов
      19 февраля 2017, 23:58
      +2
      modstore.pro/packages/utilities/voteforms

      Вопрос с вызовом сниппета внутри getResources решается путем leftJoin'a нужных таблиц.
        Alexander V
        20 февраля 2017, 00:40
        0
        А он живой еще? Давно не обновлялся и демо умерло.
          Максим Кузнецов
          20 февраля 2017, 01:16
          0
          Да, давненько.)

          Ну, каких-то недоделанных фич ждать не приходится (то же голосование анонимами). Но для системы рейтингов у ресурсов лично мне его хватает.)
          Николай
          20 февраля 2017, 09:44
          0
          путем leftJoin'a нужных таблиц.
          А можете немного подробнее об этом? Нужно править код getResources или как-то еще?
            Максим Кузнецов
            20 февраля 2017, 12:44
            0
            Упс, извиняюсь — все намного проще: на ночь глядя не обратил внимание, что речь о getResources.
              Николай
              20 февраля 2017, 12:48
              0
              у меня getProducts, но все же, как?))
                Максим Кузнецов
                20 февраля 2017, 13:06
                +1
                Если вы о том, как приджоинить voteforms к вызову (pdoTools), то так:
                [[!pdoResources?
                	&loadModels=`voteforms`
                	&leftJoin=`{
                		"VoteFormThread": {
                			"class": "VoteFormThread",
                			"on": "modResource.id = VoteFormThread.resource AND VoteFormThread.form = 1"
                		}
                	}`
                	&select=`{
                		"modResource": "*",
                		"VoteFormThread": "rating AS rating"
                	}`
                	...
                	//айди формы и желаемые поля для выборки указать под себя

                Если вас интересует, как именно реализовать это в связке с getProducts/другим сниппетом, не поддерживающим возможность присоединения таблиц, то потребуется отредактировать сниппет voteforms и при изменении рейтинга дублировать необходимое вам значение в тв-поле ресурса.

                В противном случае — сниппет внутри сниппета, но это так себе вариант: лучше перейти на pdoTools.
        Алексей
        20 февраля 2017, 13:03
        0
        CSS Star rating когда-то получилось доделать на ajax )
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          17