Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 147 комментариев

Евгений Кузнецов
Евгений Кузнецов
Продолжаю ломать голову:)
Делаю plugin на событие «msOnBeforeChangeInCart»:
$ms2 = $modx->getService('miniShop2');
$ms2->initialize($modx->context->key);
$cart = $ms2->cart->get();

$productcount = $cart[$key]['count'];  // кол-во товаров этого ключа в корзине
$sizename = $options['size'];  // беру имя размера, на который делается заказ
$sizenum = $product->get($options['size']);  //беру количество товара из базы по имени размера

/* Если в корзине больше товара, чем есть на скалде то вылезает error */
if ($productcount > $sizenum) {
	$modx->event->output('Превышен лимит по наличию');
}
Столкнулся с такой проблемой (проверял по event->output), что если запрашиваю $sizenum, т.е. лезу в $product, то перестаёт работать $key и соответственно не могу взять число купленного именно этого товара. С чем это может быть связано?
Олег
Олег
По идее надо вот так
[[!msProducts? &tpl=`MSCatalogItem` &limit=`0` &depth=`10` &sortby=`Data.price` &sortdir=`DESC` &showZeroPrice=`0` &parents=`0` &showLog=`1` &where=`{«Data.tags:LIKE»:"%tagname%"}`]]
Total rows: 0
tags хранятся в базе вот так [" \u0447\u0430\u0441\u044b","\u043a\u043b\u044e\u0447\u043d\u0438\u0446\u0430","\u044d\u0440\u043c\u0438\u0442\u0430\u0436","\u0434\u0435\u043a\u043e\u0440","\u043f\u043e\u0434\u0430\u0440\u043e\u043a","\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430","\u0442\u0435\u0441\u0442"]
Но имя декодируется верно, даже если делать &where в таком виде ('\u043a\u043b\u044e\u0447\u043d\u0438\u0446\u0430').
Не подскажешь куда копать?
Сергей
Сергей
Как я сделал тэги ссылкой(если криво, то чур не пинать):
1. Чанк вывода тэгов:
<a href="[[~ID]]?tag=[[+value]]">[[+value]]</a>
2.Сделал копию msProduct и немного подправил:
Добавляем опции для выборки в блоке $leftJoin:
array('class' => 'msProductOption', 'alias' => 'Option', 'on' => '`msProduct`.`id`=`Option`.`product_id`'),
И добавляем условие в $where (вот тут еще я сделал чтоб ничего не выводилось если не задан тэг):
if(isset($_GET['tag']) && preg_match("/^[\w\d ]+$/",$_GET['tag'])) {
    $where['Option.key'] = 'tags';
    $where['Option.value'] = $_GET['tag'];
} else {
    return "Не указан тэг";
}
Вот и все, осталось вывести этот сниппет и указать ссылку на эту страницу в ссылке из первого пункта. Думаю у знающих людей это сделано получше, но мне пока хватает и такого, хотя буду рад если предложат вариант получше.
Евгений Кузнецов
Евгений Кузнецов
Извини
А вот такой вопрос, как при событии msOnChangeInCart вытащить из продукта значение по полю size?
то есть я вижу, что при событии msOnBeforeAddToCart есть $product и я могу сделать $product->get('size'), а как то же самое сделать в msOnChangeInCart?