msOptionsPrice2 галлерея модификаций
        Всем привет, решил в первый раз написать готовое решение. Надеюсь кому-то пригодится.
Была задача вывести различные цвета товаров, решили выбрать msOptionsPrice2 он для этого подходит идеально.
По умолчанию все модификации выводятся текстом, а нам нужно получить не только название, но и изображение модификации.

И так давайте начнем, для начала создадим копию сниппета msOptionsPrice.option и назовем его msOptionsPrice.option_img
чтобы получить изображение нам нужно разобраться какие таблицы использует msOptionsPrice2:
_msop_modifications модификации
_msop_modification_images галлерею модификаций
_msop_modification_options опции модификаций
Наша задача взять опцию color из таблицы _msop_modification_options и сравнить ее mid с id _msop_modifications и уже с этой таблицы получить id изображения
открываем наш только что созданный сниппет msOptionsPrice.option_img
находим в 50 строке
и пишем новый
    
    
    
                                                                                
            Была задача вывести различные цвета товаров, решили выбрать msOptionsPrice2 он для этого подходит идеально.
По умолчанию все модификации выводятся текстом, а нам нужно получить не только название, но и изображение модификации.

И так давайте начнем, для начала создадим копию сниппета msOptionsPrice.option и назовем его msOptionsPrice.option_img
чтобы получить изображение нам нужно разобраться какие таблицы использует msOptionsPrice2:
_msop_modifications модификации
_msop_modification_images галлерею модификаций
_msop_modification_options опции модификаций
Наша задача взять опцию color из таблицы _msop_modification_options и сравнить ее mid с id _msop_modifications и уже с этой таблицы получить id изображения
открываем наш только что созданный сниппет msOptionsPrice.option_img
находим в 50 строке
if (!function_exists('getOptionColors')) {
//остальной код
}и удаляем код или комментируем, как вам удобнои пишем новый
if (!function_exists('getOptionColors')) {
        function getOptionColors(modX & $modx, $rid = null, $key = null)
    {
        $colors = [];
        $classModification = 'msopModification';
        $classFile = 'msProductFile';
        $classOption = 'msopModificationOption';
        $q = $modx->newQuery($classOption);
        
        $q->leftJoin($classModification, $classModification, "{$classOption}.mid = {$classModification}.id");
        $q->leftJoin($classFile, $classFile, "{$classModification}.image = {$classFile}.parent");
        
        $q->select($modx->getSelectColumns($classFile, $classFile, '', ['url'], false));
        $q->select($modx->getSelectColumns($classModification, $classModification, '', ['image'], false));
        $q->select($modx->getSelectColumns($classOption, $classOption, '', ['value'], false));
        
        $q->where([
            "{$classOption}.rid" => "{$rid}",
            "{$classOption}.key" => "{$key}",
        ]);
        if ($q->prepare() AND $q->stmt->execute()) {
            while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
                $k = $row['value'];
                $colors[$k] = $row;
            }
        }
        return $colors;
    }
}Теперь мы можем запустить сниппет{'msOptionsPrice.option_img' | snippet : [
'options' => 'color', //Тут нужно указать свой ключ
'tpl' => 'tpl.msOptions_colors_img',
'processColors' => 1,
]}И сам чанк tpl.msOptions_colors_img{foreach $options as $name => $values}
    <div class="sm-text"><b>{('ms2_product_' ~ $name) | lexicon}</b></div>
    <div
        {if $constraints[$name]}
            data-constraints="{$constraints[$name]| json_encode: 256 | htmlentities}"
        {/if}
        >
        {foreach $values as $value index=$index}
        <label class="input-parent">
        <input type="radio" value="{$values[$index]}" name="options[{$name}]" 
            {if $index == 0}checked="checked"{/if}
            
            {if $constraints[$name]}
                data-relations="{$relations[$name][$value]| json_encode: 256 | htmlentities}"
            {/if}
                    
            />
            <img src="{$value.url}" alt="{$value.value}"
            width="50" height="50" style="opacity: 1;"  title="{$value.value}">
        </label>
    
        {/foreach}
        
    </div>
{/foreach}Добавляем свои стили и получаем такой результат
    Комментарии: 7
                Перенес в готовые решения            
                    
                Спасибо. Нужно рейтинга набрать)            
                    
                Сделал все по инструкции ничего не получилось.
В итоге выводит вот так

                    В итоге выводит вот так

<img src="�" alt="�" width="50" height="50" style="opacity: 1;" title="�">И вот такое в коде.            
                Напишите в лс посмотрю в чем дело            
                    
                Куда писать сообщения в профиле отключены.            
                    
                включил, в тг можно            
                    
                Нашли в чем была проблема, сейчас так-же понадобилось такое решение, буду признателен если поможете.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.