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