SEQUEL.ONE

SEQUEL.ONE

Был в сети 30 июня 2026, 13:59
Заказы принимаю
Fi1osof
Fi1osof
Загружать и сохранять после D&D — это правильно. А вот base64 — увольте. Я еще понимаю на выходе кодировать base64 при генерации страницы (для мобильников это приятно), но в контенте хранить в 64 неее.
Fi1osof
Fi1osof
Если ключ не хотите светить, то однозначно запрос надо слать с вашего сервера на донора. В MODX есть готовый CURL-клиент. Вот код для примера:
$client = $modx->getService('rest.modRestCurlClient');
$result = $client->request('https://ya.ru', '/', 'POST', $params = array('foo'  => 'foo'));
print $result;
Можете с этим кодом к консоли поиграться.
Максим Кузнецов
Максим Кузнецов
Задача решается путем реализации 2х составляющих:

1. Js (идентификатор и алерт заменить на подходящие себе):
$( ".ms2_form input[name='count']" ).change(function() {
	$.jGrowl("Минимальное количество товаров для заказа - 5 шт", {theme: 'error', position: 'center'});
	$(this).val("5");
});

2. Плагин на события msOnBeforeAddToCart и msOnBeforeChangeInCart
<?php
if ($modx->event->name = 'msOnBeforeAddToCart' || $modx->event->name = 'msOnBeforeChangeInCart') {
	$values = & $modx->event->returnedValues;
	if ($values['count'] < 5) {
		$values['count'] = 5;
	}
}
— как-то так.
Воеводский Михаил
Воеводский Михаил
$cartArray = $cart->get(); // Массик товаров в корзине
$cartProduct =	$cartArray[$key]; // Один товар в корзине
Ты получаешь сначала весь массив корзины, затем обращаешься только к одному ее элементу, который определен ключом $key — тот элемент, с которым производится действие (добавление, изменение) в данный момент. Но задача — обработать все элементы. Соответственно, необходимо пройти по всему массиву и обработать его:

foreach($cartArray as $cartProduct) { // Запускаем цикл прохода по всем товарам в корзине
	$price = $cartProduct['price']; // Один элемент корзины
}
Следующий важный момент: изменять необходимо оригинальную цену, а не ту, которая в корзине. Пример: один раз изменили цену при достижении 5 шт., пользователь погулял по сайту, в корзине стало 20 шт. — если при втором изменении мы возьмем за основу цену, которая записана в корзине, скидка получится чрезмерной.

Если 2 варианта решения:
1) В options товара в корзине записывать оригинальную цену при добавлении
2) Каждый раз получать оригинальную цену из объекта товара

Второй вариант рациональнее.

switch ($modx->event->name) {
	case 'msOnAddToCart': case 'msOnChangeInCart':

		$cartArray = $cart->get();
		$cartStatus = $cart->status();
		$totalCount = $cartStatus['total_count'];

		if ($totalCount < 5) $coeff = 1;
		elseif ($totalCount < 10) $coeff = 0.8;
		elseif ($totalCount < 20) $coeff = 0.7;
		else $coeff = 0.6;

		foreach ($cartArray as &$cartProduct) {
			if ($product = $modx->getObject('msProduct', $cartProduct['id'])) {
				$cartProduct['price'] = $product->price * $coeff;
			}
		}
		
		$cart->set($cartArray);
		break;

}
SEQUEL.ONE
SEQUEL.ONE
У меня уже чанк подключён tpl.RAPCORPNET.meta со всеми моими настройками, он от главной страницы данные берёт для всех ресурсов. По поводу pdoResources, если ставлю его, то у меня перестают работать TV-параметры.