Соединяем EasyComm и mFilter2

Всем привет, и сразу к делу (кстати пишу первый раз тут, если будут ошибки — исправим).

Довольно таки часто требуется в интернет магазинах или каталогах добавить возможность пользователям писать отзывы о товарах, с этим очень хорошо справляется компонент EasyComm. Но очень часто возникает и смежная задача, слепить EasyComm с mFilter2, а именно сделать сортировку по количеству отзывов или по рейтингу товара. Выкладываю готовое решение.

Добавляем в вызов mFilter2 следующий код:

&loadModels=`easycomm`
&where=`{"class_key":"msProduct"}`
&leftJoin=`{
	"ecThread": {
		"class": "ecThread",
		"on": "msProduct.id = ecThread.resource"
	}
}`

&select=`{
	"msProduct": "*",
	"ecThread": "ecThread.rating_simple AS rating, ecThread.count AS reviews"
}`


Сортируем например с помощью параметра sort, так же в вызове mFilter2 добавляем

&sort=`rating:desc`

Или даем пользователю возможность выбирать, по какому параметру сортировать. Вставляем в шаблоне с сортировкой еще 2 строки

<li><a href="#" data-sort="rating" data-dir="rating:desc" data-default="desc" class="sort">по рейтингу <span></span></a></li>
<li><a href="#" data-sort="reviews" data-dir="reviews:desc" data-default="desc" class="sort">по отзывам <span></span></a></li>

Ну и разумеется, вместо «по рейтингу, по отзывам», если необходимо, пишем термин словаря.
Так же теперь можно пользоваться плейсхолдерами в шаблоне товара

[[+rating]] // Рейтинг товара от 1 до 5
[[+reviews]] // Количество отзывов о товаре

Всем удачи!
Павел
25 декабря 2015, 10:34
modx.pro
33
2 479
+14

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

Сергей
Сергей
04 сентября 2017, 11:45
0
Подскажите, а как вывести rating_simple_percent? Почему-то все глухо виснет, если вызываю в &select этот параметр…
    Сергей
    Сергей
    04 сентября 2017, 15:06
    0
    Решил сам)))
    [[+rating:mpy=`20`]]
    Людмила
    25 октября 2017, 13:17
    0
    Подскажите пожалуйста как для простых документов сделать тоже самое
    &where=`{"class_key":"modDocument"}`
    &leftJoin=`{
    	"ecThread": {
    		"class": "ecThread",
    		"on": "modDocument.id = ecThread.resource"
    	}
    }`
    
    &select=`{
    	"modDocument": "*",
    	"ecThread": "ecThread.rating_simple AS rating, ecThread.count AS reviews"
    }`
    Делаю так но вообще ничего не выводит.
      Людмила
      25 октября 2017, 14:48
      0
      Если включить showlog
      0.0000181: Loaded model «easycomm» from "/core/components/easycomm/model/"
      0.0000179: pdoTools loaded.
      0.0034862: Fetched ids for building filters: "" from element «mSearch2»
      0.0044649: Total time
      6 291 456: Memory usage

        Людмила
        25 октября 2017, 15:08
        0
        Подскажите пожалуйста уже замучилась никак не получается. Заранее благодарна.
          R2m0x94 (Vasily)
          18 января 2019, 10:55
          0
          Для простых документов добавить так:
          &loadModels=`easycomm`
          &where=`{"class_key":"modDocument"}`
          &leftJoin=`{
          	"ecThread": {
          		"class": "ecThread",
          		"on": "modResource.id = ecThread.resource"
          	}
          }`
          &select=`{
          	"modResource": "*",
          	"ecThread": "ecThread.rating_simple AS rating, ecThread.count AS reviews"
          }`
          В чанк вывода outer:
          <option value="reviews:desc">С отзывами</option>
          R2m0x94 (Vasily)
          18 января 2019, 11:26
          0
          — Ещё есть подсказка на тостере
            Aleksey
            23 июля 2019, 07:49
            0
            Подскажите пожалуйста, возможно данный код записать на шаблонизате Fenom?
            &loadModels=`easycomm`
            &where=`{"class_key":"msProduct"}`
            &leftJoin=`{
            	"ecThread": {
            		"class": "ecThread",
            		"on": "msProduct.id = ecThread.resource"
            	}
            }`
            
            &select=`{
            	"msProduct": "*",
            	"ecThread": "ecThread.rating_simple AS rating, ecThread.count AS reviews"
            }`
              Aleksey
              23 июля 2019, 11:04
              0
              'loadModels'=>'easycomm',
              'where' => ['class_key' => 'msProduct'],
              'leftJoin' => ["ecThread" => [
                                          "class" => "ecThread",
                                          "on" => ["msProduct.id = ecThread.resource"]
                                          ]
                                      ],
              'select' => ['msProduct' => '*', 'ecThread' => 'ecThread.rating_simple AS rating, ecThread.count AS reviews'],
              ])}
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              9