shopkeeper3 и цена в зависимости от площади



  • Добрый день! использую последнюю версию шопкипер и modx 2.5.6-pl
    Столкнулся с проблемой. Магазин торгует полотном, есть цена, например, 10000р за 1м квадратный.
    по умолчанию вывел 2 инпута с типом number, у которого выставил 1000 - ширина и 1000 - высота, собственно цена этого полотна составляет 10000р посчитать 1миллиметр квадратный не составляет труда, 10000рублей / на 1000000 и получаем 0,01 . Потом по этой же формуле будем считать стоимость полотна которое посетитель хочет купить.

    Проблема в обновлении цены и передачи этой же новой цены в корзину. Смотрю в сторону плагина на событие OnSHKgetProductPrice но тут возникает проблемка. Поскольку ширина и высота не является доп. параметрами они не доступны в системных событиях, т.е. достать их не получится. Вопрос в том, как передать ширину и высоту полотна, которое выберет сам покупатель в плагин который реагирует на событие OnSHKgetProductPrice ??

    Есть идея использовать сессию клиента, например проверить изменил ли он параметры размера полотна и записать сессию с этим параметром, а в плагине уже достать эту сессию и по формуле обработать и передать в корзину новую цену.

    Подскажите, есть ли другой "штатный" вариант как решить такую задачу, или нужно делать такой велосипед как я предложил?)

    Буду признателен за любые мысли, спасибо!



  • Еще вопрос. заметил что отвалился фильтр TagManager2. Сейчас на странице каталога только по цене фильтруется.Когда фильтр не задействован - все товары отображаются, когда дергаю ползунок - все товары пропадают, хотя под фильтр много какие не попадают. В журнале ошибок вылетает public_html/core/components/tag_manager2/model/tm_base.class.php : 49) PHP warning: explode() expects parameter 2 to be string, array given, хотя до этого все было нормально... Странно.... Начал копать и выяснил, что ранее созданный плагин на событие OnSHKgetProductPrice как раз и вызывает эту проблему. Решил закомментировать все что в нем написал, т.е. оставил только <?php - результата 0, так же фильтр валится и не работает пока сам плагин вовсе не отключу, поставлю галочку "Плагин отключен". Как это связано и как решить "конфликт"?


  • Администраторы

    Смотрю в сторону плагина на событие OnSHKgetProductPrice но тут возникает проблемка. Поскольку ширина и высота не является доп. параметрами они не доступны в системных событиях

    Я думаю они будут доступны в глобальном массиве $_POST.

    В журнале ошибок вылетает public_html/core/components/tag_manager2/model/tm_base.class.php : 49) PHP warning: explode() expects parameter 2 to be string, array given, хотя до этого все было нормально...

    В консоли браузера есть ошибки? Надо в системных настройках выставить debug = 0.



  • Участник @Andchir написал в shopkeeper3 и цена в зависимости от площади:

    Я думаю они будут доступны в глобальном массиве $_POST.

    Да, переделал под POST - доступны стали

    Участник @Andchir написал в shopkeeper3 и цена в зависимости от площади:

    В консоли браузера есть ошибки? Надо в системных настройках выставить debug = 0.

    В консоли браузера пусто, вообще ничего.

    Как решить конфликт с tagmanager2 и событием OnSHKgetProductPrice? При добавлении в корзину плагин работает корректно, но при этом почему-то не работает из-за него фильтр, можете подсказать в чем дело?


  • Администраторы

    Как решить конфликт с tagmanager2 и событием OnSHKgetProductPrice? При добавлении в корзину плагин работает корректно, но при этом почему-то не работает из-за него фильтр, можете подсказать в чем дело?

    Ждем когда наши экстрасенсы посмотрят код вашего плагина.



  • @Andchir вот код

    <?php
    // ini_set('display_errors',1);
    // error_reporting(E_ALL);
    
    $output->name == "OnSHKgetProductPrice";
    
    
    $product_S = isset($_POST['product_S']) && is_numeric($_POST['product_S']) ? $_POST['product_S'] : 1000000;
     
    
    if(isset($purchaseArray) && !empty($purchaseArray)){
        $output = 0;
        $price_tv_name = 'price';//Имя TV цены
        $p_id = isset($purchaseArray['id']) && is_numeric($purchaseArray['id']) ? $purchaseArray['id'] : 0;
    
        if($p_id){
            
            $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
            $output = $price_tv->renderOutput($p_id);
    
            $output = ceil (floatval($output)/1000000*$product_S);
        
        }
        //$modx->log(E_ERROR, json_encode($purchaseArray).' _ OnSHKgetProductPrice!!!!!!!!!!!!!!!!!!!!!!');
        //$modx->log(E_ERROR, $price.' '.$id.' OnSHKgetProductPrice!!!!!!!!!!!!!!!!!!!!!!');
        $modx->event->_output = '';
        $modx->event->output($output);
    }
    

    Но даже если плагин пустой фильтр все равно не работает, именно начинает работать tagmanager2 когда плагин выключаю. Проверил на другом магазине, просто создал пустой плагин с таким событием и фильтр сразу отвалился... Может я что-то не так настроил в tagmanager2 ?
    При гет запросе

    ?f_price[from]=16820&f_price[to]=39296
    

    на странице товары пропадают, когда сам меняю на ?f_price[from]=16820 то товары выводятся, но нижняя граница по цене не отрабатывает, выводятся все товары



  • Настройки tagmanager2 http://joxi.ru/BA0v40YSJ1lLem
    Сниппет: getPage http://joxi.ru/ZrJyqYKH9Q3V1A http://joxi.ru/LmGD3eWFeB4xl2
    Вызов

    <div class="col-sm-4 col-md-3 sidebar-filter" id="filters" style="display: none;">
        	  <div class="name_sidebar">Выбор по параметрам</div>
        	  <form action="[[~[[*id]]]]" method="get" class="form-filters">
                  
    	    <input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" />  
                
                    [[tmFilters?
                        &filterOuterTpl=`2tm2_filterOuterTpl`
                        &filterTpl=`2tm2_filterTpl`
                        &filterNumericOuterTpl=`2tm2_filterOuterTpl`
                        &filterNumericTpl=`2tm2_filterNumericTpl`
                        
                      
                        &toPlaceholder=`filters`
                        &filtersType=`filters`
                        &jsMap=`1`
                    ]]
    
                    [[+filters]]
                    
                    <button type="button" class="res btn_ btn-orange" onclick="window.location.href = window.location.pathname; return false;">Сбросить фильтр</button>
    		</form>
        	</div>
        	
        	<div class="col-sm-8_ col-md-9_ col-xs-12">
        	  <div class="row prods_ flex_" >
        	      <div class="flex prods" id="products">
        	          [[!tmCatalog]]
        	      </div>
        	  </div>
        	  
            <div class="pagination" >
                <ul class="pages" id="pages">
                    [[!+page.nav]]
                </ul>
            </div>
    


  • Ни кто не подскажет в чем дело?



Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.