Подскажите как... подружить minishop2 и easycomm
Доброго времени суток!
Возникла необходимость в магазине сделать сортировку в каталоге по рейтингу товара, для того что бы сделать рейтинг решил использовать компонент easycomm. Нaстроить его я смог, но вот как объединить их теперь в воедино, что бы сортировать по рейтингу?
Подскажите в каком направлении искать информацию, как это сделать! На сайте что то не смог найти статей, которые помогли бы.
З.Ы. Заранее спасибо за вашу помощь и советы.
Возникла необходимость в магазине сделать сортировку в каталоге по рейтингу товара, для того что бы сделать рейтинг решил использовать компонент easycomm. Нaстроить его я смог, но вот как объединить их теперь в воедино, что бы сортировать по рейтингу?
Подскажите в каком направлении искать информацию, как это сделать! На сайте что то не смог найти статей, которые помогли бы.
З.Ы. Заранее спасибо за вашу помощь и советы.
Комментарии: 4
НУ хоть намек, что почитать. MODX я только начал изучать…
Я сделал TV поле rating для шаблона товара и плагин на событие OnDocFormRender с проверкой товар это или нет (ID шаблона товара у меня 7):
В моем случае этого хватило, поскольку товары постоянно обновляются и менеджер сайта их открывает, но можно сделать по тому же принципу сниппет, который запускать по Cron.
<?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.
Допустим, у вас есть сниппет msProducts/mFilter2 для вывода/сортировки товаров. Для того, чтобы организовать сортировку по рейтингу нужно:
— загрузить модель easycoms в вызов &loadModels
— обозначить классы вызываемого контента
— вывести желаемую сортировку в &sort или &sortby, в зависимости от вызываемого сниппета
В итоге у вас получится примерно (напрямую с easycomm не работал) такая конструкция:
Извиняюсь, что не даю конкретный пример join'a — не работал с easycomm. Впрочем, составить запрос по аналогии, надеюсь, труда не составит.
— загрузить модель 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. Впрочем, составить запрос по аналогии, надеюсь, труда не составит.
Большое спасибо за советы, пойду пробовать.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.