Ссылка на 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';
}
Алексей
23 января 2016, 19:40
modx.pro
3
2 077
0

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

Максим Кузнецов
24 января 2016, 06:53
+1
Запускать msGallery внутри каждого чанка выборки msProducts = куча лишних запросов к бд.

Гораздо выгоднее было бы заджоинить желаемую таблицу изображений, а внутри чанка уже дописать условие, что если превью №2 пустое — выводить первое.
    Алексей
    24 января 2016, 11:47
    0
    Запускать msGallery внутри каждого чанка выборки msProducts = куча лишних запросов к бд.
    Я понимаю, поэтому и написал сюда. У сниппета msGallery нет параметра leftJoin, о котором говорит комментатор ниже. Вы можете показать правильный код вызова сниппета и плэйсхолдер, в который попадет изображение?
      Максим Кузнецов
      24 января 2016, 13:13
      0
      У сниппета msGallery — нет, зато есть у msProducts.
      В него можно подгрузить первую миниатюру, воспользовавшись персональным параметром &includeThumbs, а можно заджоинить изображение по аналогии с ms2gallery (загружаете модель в loadModels, прописываете нужные джоины (только заместо modResource — msProduct) и цепляете их в Select, указывая желаемые плейсхолдеры).
    Василий Наумкин
    24 января 2016, 08:15
    0
    Так как msProducts не позволяет присоединить к выборке 2-ое изображение товара
    Позволяет.

    Нужно только прописать дополнительный leftJoin.
      Николай Загумённов
      24 января 2016, 12:02
      0
      Выбирал из 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>
        Алексей
        24 января 2016, 12:12
        0
        Это не то. Мне нужно выбирать товары, а не ресурсы. Вы выбираете превью, а мне нужны оригиналы. Хотелось бы получить готовый вызов или оставить как есть. Как я понял, ничего сложного, но структура Minishop мне не знакома. Похоже, придется оставить костыль
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6