Вывод фотографии выбранной модификации продукта msOptionsPrice2 в миникорзине msMiniCartDynamic

Всем привет. Я начинающий web-разработчик, поэтому описанное мною решение кому-то покажется топорным, однако в силу того, что другого решения на просторах интернета я не нашел, то опубликую свое.

Верстаю магазин на 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}
И вот нам счастье, в мини корзине вместо основного фото товара выводится фото выбранной модификации.

Надеюсь, кому нибудь пригодится.

В если вдруг кто-то поможет решить задачку с выводом на странице товара только тех фото, которые относятся к выбранной модификации, а не всех фото товара, буду очень признателен :)
Илья
16 ноября 2022, 23:38
modx.pro
1
891
+2

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0