Соединяем 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 202
+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