Подскажите как... подружить minishop2 и easycomm

Доброго времени суток!

Возникла необходимость в магазине сделать сортировку в каталоге по рейтингу товара, для того что бы сделать рейтинг решил использовать компонент easycomm. Нaстроить его я смог, но вот как объединить их теперь в воедино, что бы сортировать по рейтингу?
Подскажите в каком направлении искать информацию, как это сделать! На сайте что то не смог найти статей, которые помогли бы.

З.Ы. Заранее спасибо за вашу помощь и советы.
Игорь
07 декабря 2015, 19:37
modx.pro
2
1 775
0

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

Игорь
09 декабря 2015, 00:16
0
НУ хоть намек, что почитать. MODX я только начал изучать…
    Павел Романов
    09 декабря 2015, 00:35
    +1
    Я сделал TV поле rating для шаблона товара и плагин на событие OnDocFormRender с проверкой товар это или нет (ID шаблона товара у меня 7):
    <?php
    if ($resource->get('template') == 7) {
    	$thr = 'resource-'.$id.'';
    	$pars = array (
    		'thread'=> $thr,
    		'tpl'=> 'rating-tv'
    		);
    	$rat = $modx->runSnippet('ecThreadRating',$pars);
    	$rating = ceil($rat);
    	$page = $modx->getObject('modResource', $id);
    	$page->setTVValue('rating', $rating);
    }
    При открытии ресурса в редакторе ему автоматически прописывается в TV rating его рейтинг из таблицы компонента. Ну а дальше уже простая сортировка по TV.

    В моем случае этого хватило, поскольку товары постоянно обновляются и менеджер сайта их открывает, но можно сделать по тому же принципу сниппет, который запускать по Cron.
      Максим Кузнецов
      09 декабря 2015, 00:44
      +2
      Допустим, у вас есть сниппет msProducts/mFilter2 для вывода/сортировки товаров. Для того, чтобы организовать сортировку по рейтингу нужно:
      — загрузить модель easycoms в вызов &loadModels
      — обозначить классы вызываемого контента
      &class=`msProduct` &element=`msProducts`
      — заджоинить таблицы easycoms в &leftJoin и &select
      — вывести желаемую сортировку в &sort или &sortby, в зависимости от вызываемого сниппета

      В итоге у вас получится примерно (напрямую с easycomm не работал) такая конструкция:
      [[!mFilter2? &loadModels=`voteforms` &class=`msProduct` &element=`msProducts`&sort=`желаемый_плейсхолдер_для_рейтинга:desc`
      	&where=`{"class_key":"msProduct"}`
      	&leftJoin=`{
      		"Класс_для_easycomm": {
      			"class": "Класс_для_easycomm",
      			"on": "msProduct.id = Класс_для_easycomm.поле_с_айди_страницы_в_таблице_easycomm"
      		}
      	}`
      	&select=`{"Data": "*",  "Класс_для_easycomm": "Класс_для_easycomm.поле_рейтинга AS желаемый_плейсхолдер_для_рейтинга"}`
      ]]
      В вызываемом чанке рейтинг можно будет выводить плейсхолдером [[+желаемый_плейсхолдер_для_рейтинга]], соответственно.

      Извиняюсь, что не даю конкретный пример join'a — не работал с easycomm. Впрочем, составить запрос по аналогии, надеюсь, труда не составит.
        Игорь
        10 декабря 2015, 22:17
        0
        Большое спасибо за советы, пойду пробовать.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          4