Евгений

Евгений

Был в сети 19 июля 2024, 14:06
Заказы не принимаю
Тодор
Тодор
{'!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
Игорь Терентьев
Игорь Терентьев
Вот так можно присоединить msProductData к pdoMenu и выбрать необходимые поля:

{'pdoMenu' | snippet : [
    'parents' => $_modx->resource.id,
    'select' => [
        'modResource' => '*',
        'Data' => 'price,old_price,article',
    ],
    'leftJoin' => [
        'Data' => [
            'class' => 'msProductData',
            'alias' => 'Data',
            'on' => 'Data.id = modResource.id',
        ],
    ],
]}
Виталий Серый
Виталий Серый
На текущий момент без изменения сниппета msProducts сгруппировать не получится.
Надо править либо сам сниппет, либо создать копию (если не прав, то править надо меня).

После 28 строки добавить что-то вроде такого
// Add grouping
$groupby = array(
    'msProduct.id',
); //строка 28
if(!empty($scriptProperties['groupby'])){
    $groupby = array(
        $scriptProperties['groupby'],
    );
}

Так же при желании все необходимое можно добавить в вызове сниппета вместо создания нового
{'!mFilter2' | snippet:[
    'class' => 'msProduct',
    'parents' => 0,
    'element' => 'msProducts',
    'innerJoin' => '{
                "Category": {
                    "class": "msCategory"
                 }
            }',
    'select' => '{
                "Category": "*"
            }',
    'groupby' => 'Category.id',
    'tpl' => '@INLINE <p><a href="{$uri}">{$pagetitle}</a></p>',
    ....
]}