Вывод фотографии выбранной модификации продукта msOptionsPrice2 в миникорзине msMiniCartDynamic
Всем привет. Я начинающий web-разработчик, поэтому описанное мною решение кому-то покажется топорным, однако в силу того, что другого решения на просторах интернета я не нашел, то опубликую свое.
Верстаю магазин на ModX Revo 2.8.4-pl, MiniShop2 и сопутствующих компанентах.
Реализовал мини корзину на msMiniCartDynamic, а цвета товара с галереей для каждого цвета вывожу через msOptionsPrice2, дефолтно все работает здорово.
Но по ТЗ каждый товар должен иметь разные цвета и свою галерею к каждому цвету, соответственно при выборе цвета галерея товара должна как минимум перелистываться на превьюшную картинку выбранной модификации (цвета), а как максимум, должны выводиться фото только выбранной модификации (это, к сожалению, у меня реализовать пока так и не получилось).
Все остальное я реализовал, в корзине выводится фото выбранной модификации, красота… но вот что делать с миникорзиной? msMiniCartDynamic2 нынче не доступен, соболезную родным автора, да и не знаю, возможно ли во второй части выводить именно фото модификации «из коробки» (без дополнительных танцев с бубном).
Обшерстил все форумы, но даже намека на решение проблемы не нашел. Пришлось решать своими силами. Бонусом вывел в мини корзину и цвет с размером в нормальном виде.
И так, мой костыль выглядит следующим образом:
Для начала лезем в core/components/msminicartdynamic/model/msminicartdynamic/msminicartdynamic.class.php
и приемно на 85 строке дописываем следующий код:
Надеюсь, кому нибудь пригодится.
В если вдруг кто-то поможет решить задачку с выводом на странице товара только тех фото, которые относятся к выбранной модификации, а не всех фото товара, буду очень признателен :)
Верстаю магазин на ModX Revo 2.8.4-pl, MiniShop2 и сопутствующих компанентах.
Реализовал мини корзину на msMiniCartDynamic, а цвета товара с галереей для каждого цвета вывожу через msOptionsPrice2, дефолтно все работает здорово.
Но по ТЗ каждый товар должен иметь разные цвета и свою галерею к каждому цвету, соответственно при выборе цвета галерея товара должна как минимум перелистываться на превьюшную картинку выбранной модификации (цвета), а как максимум, должны выводиться фото только выбранной модификации (это, к сожалению, у меня реализовать пока так и не получилось).
Все остальное я реализовал, в корзине выводится фото выбранной модификации, красота… но вот что делать с миникорзиной? msMiniCartDynamic2 нынче не доступен, соболезную родным автора, да и не знаю, возможно ли во второй части выводить именно фото модификации «из коробки» (без дополнительных танцев с бубном).
Обшерстил все форумы, но даже намека на решение проблемы не нашел. Пришлось решать своими силами. Бонусом вывел в мини корзину и цвет с размером в нормальном виде.
И так, мой костыль выглядит следующим образом:
Для начала лезем в core/components/msminicartdynamic/model/msminicartdynamic/msminicartdynamic.class.php
и приемно на 85 строке дописываем следующий код:
'oid_d' => $v['options']['modification'],
'color_d' => $v['options']['color'],
'size_d' => $v['options']['size'],
Тоесть, достаем из массива опций товара id выбранной модификации, цвет и размер. Получиться должно примерно так:if ($cart) {
foreach ($cart as $k => $v) {
$t = array();
$t = $this->getPathImg($v['id'], $_SESSION['dynamicChunk']['img']);
$success['success'] = true;
$success['data'] = array(
'key_d' => $k,
'id_d' => $v['id'],
'name_d' => $t['title'],
'count_d' => $v['count'],
'price_d' => $v['price'],
'sum_d' => $v['count'] * $v['price'],
'img_d' => $t['img_path'],
'oid_d' => $v['options']['modification'],
'color_d' => $v['options']['color'],
'size_d' => $v['options']['size'],
);
...
Затем, открываем сниппет msMiniCartDynamic и дописываем тоже самоеforeach ($cart as $k => $v) {
$t = array();
$t = $msMiniCartDynamic->getPathImg($v['id'], $img);
$out .= $msMiniCartDynamic->getChunk($tpl, array(
'name_d' => $t['title'],
'id_d' => $v['id'],
'key_d' => $k,
'count_d' => $v['count'],
'price_d' => $v['price'],
'sum_d' => $v['count'] * $v['price'],
'img_d' => $t['img_path'],
'oid_d' => $v['options']['modification'],
'color_d' => $v['options']['color'],
'size_d' => $v['options']['size'],
));
}
...
Теперь для вывода цвета и размера нам остается только прописать плейсхолдеры [[+color_d]] и [[+size_d]] в нужных местах внутри чанка msMinicartDynamic. А для вывода превьюшки модификации вызываем сниппет msOptionsPrice.modification с нужными параметрами, к примеру прямо на месте вывода картинки (все так же в чанке msMinicartDynamic):<a href="[[~[[+id_d]]]]">
[[!msOptionsPrice.modification?
&includeThumbs=`small`
&limit=`30`
&product=`[[+id_d]]`
&oid=`[[+oid_d]]`
&tpl=`MiniCartImg_tpl`
]]
</a>
Соответственно, чанк MiniCartImg_tpl:{if $_pls['small']?}
<img src="{$_pls['small']}" alt="{$product_pagetitle}" title="{$product_pagetitle}"/>
{else}
<img src="{'assets_url' | option}components/minishop2/img/web/ms2_small.png"
srcset="{'assets_url' | option}components/minishop2/img/web/ms2_small@2x.png 2x"
alt="{$product_pagetitle}" title="{$product_pagetitle}"/>
{/if}
И вот нам счастье, в мини корзине вместо основного фото товара выводится фото выбранной модификации.Надеюсь, кому нибудь пригодится.
В если вдруг кто-то поможет решить задачку с выводом на странице товара только тех фото, которые относятся к выбранной модификации, а не всех фото товара, буду очень признателен :)