Богдан

Богдан

Был в сети 29 июня 2021, 17:12
Заказы не принимаю
Я так понимаю, цены только в корзине нужно менять? Я сделал такой функционал через плагин. Создаем плагин cartProcessing, вешаем на него события msOnAddToCart, msOnChangeInCart, msOnRemoveFromCart.
Текст плагина:
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
        $miniShop2 = $modx->getService('minishop2','miniShop2',
        	MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
        if (!($miniShop2 instanceof miniShop2)) return '';
        
        // Инициализируем класс в текущий контекст
        $miniShop2->initialize($modx->context->key, $scriptProperties);
        $total_count = $miniShop2->cart->status()['total_count'];
        $tmp = $miniShop2->cart->get();
        if ($total_count > 4) { // если 5 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$optPrice = $product->get('article'); // вместо article можно указать любое другое поле товара
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        else {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$tmp[$key1]['price'] = $realPrice;
                }
            }
        }
        $miniShop2->cart->set($tmp);
        break;
}
В данном случае, если в корзине 5 и более товаров будут отображены оптовые цены, меньше 5 шт. — розничные. Оптовые цены будут браться из поля article (можно исправить под любое поле товара).
Василий, спасибо, настроил VPS по твоему топику, все просто летает.

Но есть одна проблема — иногда наблюдаются странные глюки с передачей файлов по sftp через FileZilla (через другие клиенты не пробовал). При попытке скачать или загрузить файл на хостинг получаю ошибку — "Превышено время ожидания соединения", и так может быть несколько раз подряд. Потом через какое-то время опять все работает. И так регулярно. Какой либо закономерности возникновения этой ошибки не заметил.

У кого нибудь была похожая проблема?
Получается, таким образом можно реализовать и мультивалютность? Если записывать в сессию текущую валюту, а в плагине просто умножать цену на нужный коэффициент. Но как в этом случае суммировать стоимость доставки с учетом текущей валюты?