Как в карточке товара каталога вывести несколько картинок с помощью сниппета msProducts?

У меня в каталоге выводится список товаров через сниппет msProducts
{$_modx->runSnippet('msProducts', [
          'parents' => 5,
          'includeThumbs' => 'middle,retinamiddle',
          'tpl'=> '@FILE chunks/product.tpl'
])}
В карточке товара необходимо вывести все картинки из галлереи.
Для этого в чанке (product.tpl) запускаю сниппет msGallery
<li>
  <h3>{$pagetitle}</h3>
    <figure>
      {$_modx->runSnippet('msGallery', [
      'product' => $id,
      'tpl'=> '@FILE chunks/middle_images.tpl'
      ])}
    </figure>
</li>
Чанк (middle_images.tpl) с картинками выглядит так
{foreach $files as $file}
    <img src="{$file['middle']}" srcset="{$file['retinamiddle']} 2x">
{/foreach}
Получается при выводе каждого товара идет дополнительный запрос для получения картинок.
Есть ли способ сразу получить все картинки не делая лишний запрос?
Oleh
11 сентября 2020, 22:17
modx.pro
1
674
0

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

Тодор
14 сентября 2020, 12:17
2
+2
{'!msProducts' | snippet:[
    'parents' => '5',
    'tpl'=> '@FILE chunks/middle_images.tpl',
    'leftJoin' => '{
        "images" : {
	    "class" : "msProductFile",
	    "on" : "`images`.product_id = msProduct.id AND `images`.type = \'image\' AND `images`.path NOT LIKE \'%x%\'"
	}
    }',
    'select' => '{
         "images" : "GROUP_CONCAT(`images`.`url` SEPARATOR \';\') as `images`"
    }',
]}
В самом чанке все картинки будут в строке с разделителем ";"
{set $imgArr = $images | split: ';'}
{foreach $imgArr  as $fileSrc}
    <img src="{$fileSrc}" srcset="{$fileSrc} 2x">
{/foreach}
Здесь выводятся оригиналы, для других превью меняешь/добавляешь leftJoin и select
    Oleh
    14 сентября 2020, 12:22
    0
    Спасибо!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2