Nikita

Nikita

С нами с 18 февраля 2013; Место в рейтинге пользователей: #381
ck
ck
31 января 2017, 14:27
1
0
Сам себе отвечу: в текущей версии msProductOptions есть параметр &onlyOptions. Его и нужно использовать.
charset
21 декабря 2016, 22:29
2
+1
уже не нужно. Нашел в коде, если кому интересно:

Телефон покупателя: {$address.phone}
Email покупателя: {$user.email}
Способ доставки: {$delivery.name}
Тип оплаты: {$payment.name}
Комментарий к заказу: {$address.comment}
but1head
08 ноября 2016, 20:58
2
0
<?php
if($modx->event->name != 'msOnGetProductPrice') return;

if($modx->user  && $modx->user->isMember('Wholesaler')){
    $values = & $modx->event->returnedValues;
    $resource = $modx->getObject('msProduct', $product->id);
    $wholesale_price = $resource->getTVValue('price_opt');
    if($wholesale_price){
        $values['old_price'] = $values['price'];
        $values['price'] = $wholesale_price;
    }
}
Элементарная оптовая цена для юзеров в группе «оптовик», сделаная через tv, 3 минуты работы. Очень сложно?
Важное качество программиста «гуглить», а не просить сделать других его работу. Не умеете — не беритесь.
Виталий Валерьевич
08 июля 2016, 13:02
2
+1
[[!pdoPage?
	&element=`pdoResources`
	&loadModels=`ms2gallery`
	&class=`msResourceFile`
	&tpl=`@INLINE <a href="[[+url]]" target="_blank"><img src="[[+120x90]]" /></a>`
	&where=`{"parent": СЮДА ID РОДИТЕЛЯ,"active":1}`
	&limit=`10`
	&sortby=`id`
	&sortdir=`ASC`
	&leftJoin=`{
		"120x90":{"class":"msResourceFile","alias":"120x90", "on":"120x90.parent=msResourceFile.id AND 120x90.path LIKE '%/120x90/'"}
	}`
	&select=`{
		"msResourceFile":"*",
		"120x90":"120x90.url as 120x90"
	}`
]]
[[!+page.nav]]

Заменить «СЮДА ID РОДИТЕЛЯ» на реальный ID, подставить свои значения по размерам изображений.

Да, это пример взятый из документации с pdoPage (постраничной навигацией), можно вывести просто через pdoResources
Сергей Фещуков
13 марта 2016, 12:24
2
0
Обработчик события успешного добавления товара в корзину:
miniShop2.Callbacks.Cart.add.response.success = function(response) {
    //здесь ваш js-код
}
/* Но не забывайте, что есть событие изменения количества товара в корзине */
miniShop2.Callbacks.Cart.change.response.success = function(response) {
    //здесь ваш js-код
}
Володя
20 февраля 2016, 14:28
1
0
если у вас динамические страницы, то можно поступить так.
создать плагин на vpOnResourceAfterCreate
в нем проверяйте актуальность своих данных и если их нет то просто отправляете пользоваетля на страницу ошибок.
<?php
switch ($modx->event->name) {
	case 'vpOnResourceAfterCreate':

	    $fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
	    /* ваша проверка */
	    if (false) {
	        $modx->sendErrorPage();
	    }
	    
        break;	    
}
Petro
04 февраля 2016, 00:52
1
0
Нашел

Параметр &prepareTVs нужен для ТВ типов file и image, которые содержат ссылку на файл и могут быть связаны с источником медиа.
В него нужно указывать список ТВ, или цифру 1 — если вы хотите включить подготовку всех ТВ из includeTVs.

Но чего-то с источником &prepareTVs работает не так как написано. Так должно быть? Или я что-то не так понимаю?
Rootiys
05 ноября 2015, 15:56
1
0
В системной настройке ms2_order_product_fields допишите нужные вам поля.
Андрей Копп
15 октября 2015, 20:07
2
0
Рабочий вариант плагина:

<?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 > 499) { // если 5 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount5 = $product->get('discount5');
                	$opt = $realPrice*$discount5/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 99) { // если 10 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount4 = $product->get('discount4');
                	$opt = $realPrice*$discount4/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 29) { // если 30 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount3 = $product->get('discount3');
                	$opt = $realPrice*$discount3/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 9) { // если 100 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount2 = $product->get('discount2');
                	$opt = $realPrice*$discount2/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 4) { // если 500 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount1 = $product->get('discount1');
                	$opt = $realPrice*$discount1/100;
                    $optPrice = $realPrice-$opt;
                	$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;
}
Осталось теперь придумать как это всё менять на лету, на странице с товаром и в корзине при оформлении заказа, может кто-нибудь в курсе как дописать этот скрипт, чтобы считалось всё на лету?

<script type="text/javascript">
$('#msCart input[name="count"]').change(function(){
	var count = $(this).val(); 
	var singlePrice = parseInt($(this).closest('.tab_row').children(".tab_sum").text());

	$(this).closest('.tab_row').children(".tab_pr").children("span").html(count * singlePrice);
});
</script>