Ссылка на 2-ое изображение при выводе категории
Здравствуйте. Так как msProducts не позволяет присоединить к выборке 2-ое изображение товара, написал самый настоящий костыль для получения url 2-го изображения по id, потому что не знаю как это сделать через API MODX. Может ли кто-нибудь написать грамотную альтернативу моему решению?
$imagesString = $modx->runSnippet('msGallery', array('product'=>$id,'limit'=>2,'tplOuter'=>'@INLINE [[+rows]]','tplRow'=>'@INLINE [[+url]],'));
$rows = explode(',',$imagesString);
if(count($rows)>2)
{
return trim($rows[1]);
}
else if(count($rows)>1)
{
return $rows[0];
}
else
{
return '/assets/components/minishop2/img/web/ms2_big.png';
}
Комментарии: 6
Запускать msGallery внутри каждого чанка выборки msProducts = куча лишних запросов к бд.
Гораздо выгоднее было бы заджоинить желаемую таблицу изображений, а внутри чанка уже дописать условие, что если превью №2 пустое — выводить первое.
Гораздо выгоднее было бы заджоинить желаемую таблицу изображений, а внутри чанка уже дописать условие, что если превью №2 пустое — выводить первое.
Запускать msGallery внутри каждого чанка выборки msProducts = куча лишних запросов к бд.Я понимаю, поэтому и написал сюда. У сниппета msGallery нет параметра leftJoin, о котором говорит комментатор ниже. Вы можете показать правильный код вызова сниппета и плэйсхолдер, в который попадет изображение?
У сниппета msGallery — нет, зато есть у msProducts.
В него можно подгрузить первую миниатюру, воспользовавшись персональным параметром &includeThumbs, а можно заджоинить изображение по аналогии с ms2gallery (загружаете модель в loadModels, прописываете нужные джоины (только заместо modResource — msProduct) и цепляете их в Select, указывая желаемые плейсхолдеры).
В него можно подгрузить первую миниатюру, воспользовавшись персональным параметром &includeThumbs, а можно заджоинить изображение по аналогии с ms2gallery (загружаете модель в loadModels, прописываете нужные джоины (только заместо modResource — msProduct) и цепляете их в Select, указывая желаемые плейсхолдеры).
Так как msProducts не позволяет присоединить к выборке 2-ое изображение товараПозволяет.
Нужно только прописать дополнительный leftJoin.
Выбирал из ms2Gallery, может быть поможет.
<div id="pdopage" class="fotogallery">
<div class="rows">
[[!pdoPage?
&element=`pdoResources`
&loadModels=`ms2gallery`
&parents=`[[*id]]`
&ajaxMode=`default`
&limit=`10`
&tpl=`tpl.FotogalleryAlbum.row`
&leftJoin=`{
"360x270": {"class":"msResourceFile","alias":"360x270", "on": "360x270.resource_id = modResource.id AND 360x270.path LIKE '%/360x270/' AND 360x270.rank=0"}
,"360x270x1": {"class":"msResourceFile","alias":"360x270x1", "on": "360x270x1.resource_id = modResource.id AND 360x270x1.path LIKE '%/360x270/' AND 360x270x1.rank=1"}
,"360x270x2": {"class":"msResourceFile","alias":"360x270x2", "on": "360x270x2.resource_id = modResource.id AND 360x270x2.path LIKE '%/360x270/' AND 360x270x2.rank=2"}
,"360x270x3": {"class":"msResourceFile","alias":"360x270x3", "on": "360x270x3.resource_id = modResource.id AND 360x270x3.path LIKE '%/360x270/' AND 360x270x3.rank=3"}
,"360x270x4": {"class":"msResourceFile","alias":"360x270x4", "on": "360x270x4.resource_id = modResource.id AND 360x270x4.path LIKE '%/360x270/' AND 360x270x4.rank=4"}
}`
&select=`{
"modResource":"*"
,"360x270":"360x270.url as 360x270"
,"360x270x1":"360x270x1.url as 360x270x1"
,"360x270x2":"360x270x2.url as 360x270x2"
,"360x270x3":"360x270x3.url as 360x270x3"
,"360x270x4":"360x270x4.url as 360x270x4"
}`
]]
</div>
[[!+page.nav]]
</div>
Это не то. Мне нужно выбирать товары, а не ресурсы. Вы выбираете превью, а мне нужны оригиналы. Хотелось бы получить готовый вызов или оставить как есть. Как я понял, ничего сложного, но структура Minishop мне не знакома. Похоже, придется оставить костыль
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.