Последние темы


Плагин расчета скидки от суммы заказа

  • Доброго всем дня.
    Стоит следующая задача:
    Есть несколько цен: цена1 цена2 и т.д.
    Необходимо сделать плагин, который будет менять цену заказе в зависимости от цены.
    Например, если стоимость всего заказа достигает 30000 р. нужно подставить на все позиции заказа вместо цена1 цену2.
    Вот то, что пока написал, но не работает:

    /**
    * OnSHKsaveOrder
    *  
    * @internal    @events OnSHKcalcTotalPrice
    *
    */
    /*Функция для определения цены исходя из суммы заказанного товара*/
    
    if(!function_exists(Get_Price)){
    function Get_Price($id,$price_tota) {
     global $modx;
     $resource = $modx->getObject('modResource',array('id'=>$id));
     $price = $resource->getTVValue('price');//Значение TV-розничная цена
     $price2 = $resource->getTVValue('price_opt1');//оптовая цена при 30000
     $price3 = $resource->getTVValue('price_opt2');//оптовая цена при 60000
     $price4 = $resource->getTVValue('price_opt3');//оптовая цена при 90000
     $minzakaz_price1 = 30000;//опт минимальная цена 1
     $minzakaz_price2 = 60000;//опт минимальная цена 2
     $minzakaz_price3 = 90000;//опт минимальная цена 3
    
     if ($price_tota < $minzakaz_price1)  $price = $price; //цена до первой оптовой цены
     elseif ($price_tota >= $minzakaz_price1){
     	if ($price2 > 0) $price = $price2; /*цена, если больше или равно 30000 */
     }
     if ($price_tota >= $minzakaz_price2) $price = $price3;
     if ($price_tota >= $minzakaz_price3) $price = $price4;
       return $price;
     }
    }
    /*Собственно плагин, который повешен на OnSHKcalcTotalPrice*/
    if ($modx->event->name == 'OnSHKcalcTotalPrice'){
     if(!empty($_SESSION['shk_order'])){
       $purchases = $_SESSION['shk_order'];
      foreach($purchases as $key => $product){
     $id = $product['id']; 
             if (empty($id)) break;
    $id_tmp[$id]['id']= $key;
    $price = Get_Price($id,$price_tota);
    $_SESSION['shk_order'][$key]['price']=$price;
     }
    }
    $modx->event->_output = '';
    return '';
    }
    

    Подскажите в какую сторону смотреть

  • Изменение цены реализовал, все корректно.
    Вот код плагина:

    <?php
    /**
    * OnSHKsaveOrder
    *  
    * @internal    @events OnSHKcalcTotalPrice
    *
    */
    /*Функция для определения цены исходя из суммы заказанного товара*/
    
    if(!function_exists(Get_Price)){
    function Get_Price($id,$price_tota) {
     global $modx;
     $resource = $modx->getObject('modResource',array('id'=>$id));
     $price = $resource->getTVValue('price');//Значение TV-розничная цена
     $price2 = $resource->getTVValue('price_opt1');//оптовая цена при 30000
     $price3 = $resource->getTVValue('price_opt2');//оптовая цена при 60000
     $price4 = $resource->getTVValue('price_opt3');//оптовая цена при 90000
     $minzakaz_price1 = 30000;//опт минимальная цена 1
     $minzakaz_price2 = 60000;//опт минимальная цена 2
     $minzakaz_price3 = 90000;//опт минимальная цена 3
    
     if ($price_tota < $minzakaz_price1)  $price = $price; //цена до первой оптовой цены
     elseif ($price_tota >= $minzakaz_price1){
     	if ($price2 > 0) $price = $price2; /*цена, если больше или равно 30000 */
     }
     if ($price_tota >= $minzakaz_price2) $price = $price3;
     if ($price_tota >= $minzakaz_price3) $price = $price4;
       return $price;
     }
    }
    /*Собственно плагин, который повешен на OnSHKcalcTotalPrice*/
    if ($modx->event->name == 'OnSHKcalcTotalPrice'){
     if(!empty($_SESSION['shk_order'])){
       $purchases = $_SESSION['shk_order'];
      foreach($purchases as $key => $product){
     $id = $product['id']; 
             if (empty($id)) break;
    $id_tmp[$id]['id']= $key;
    $price = Get_Price($id,$price_total);
    $_SESSION['shk_order'][$key]['price']=$price;
     }
    }
    $modx->event->_output = '';
    return '';
    }
    

    Теперь другой вопрос.
    При пересчете корзины не выводится сумма заказа. Знатоки, как исправить?.

  • Решил вопрос, но через костыль. Почему-то сумма заказа из плагина не выводится в плэйсхолдер [[+price_total]], зато в любой другой за милую душу.
    Код плагина ниже, может кому пригодится:

    <?php
    /**
    * OnSHKsaveOrder
    *  
    * @internal    @events OnSHKcalcTotalPrice
    *
    */
    /*Функция для определения цены исходя из суммы заказанного товара*/
    
    if(!function_exists(Get_Price)){
    function Get_Price($id,$price_tota) {
    global $modx; 
     $resource = $modx->getObject('modResource',array('id'=>$id));
     $price = $resource->getTVValue('price');//Значение TV-розничная цена
     $price2 = $resource->getTVValue('price_opt1');//оптовая цена при 30000
     $price3 = $resource->getTVValue('price_opt2');//оптовая цена при 60000
     $price4 = $resource->getTVValue('price_opt3');//оптовая цена при 90000
     $minzakaz_price1 = 30000;//опт минимальная цена 1
     $minzakaz_price2 = 60000;//опт минимальная цена 2
     $minzakaz_price3 = 90000;//опт минимальная цена 3
    
     if ($price_tota < $minzakaz_price1)  $price = $price; //цена до первой оптовой цены
     elseif ($price_tota >= $minzakaz_price1){
     	if ($price2 > 0) $price = $price2; /*цена, если больше или равно 30000 */
     }
     if ($price_tota >= $minzakaz_price2) $price = $price3;
     if ($price_tota >= $minzakaz_price3) $price = $price4;
       return $price;
     }
    }
    /*Собственно плагин, который повешен на OnSHKcalcTotalPrice*/
    $e = &$modx->Event;
    if ($e->name == 'OnSHKcalcTotalPrice'){
     if(!empty($_SESSION['shk_order'])){
       $purchases = $_SESSION['shk_order'];
      foreach($purchases as $key => $product){
     $id = $product['id']; 
             if (empty($id)) break;
    $id_tmp[$id]['id']= $key;
    $tmp_prtotal=$price_total;
    $price = Get_Price($id,$tmp_prtotal);
    $_SESSION['shk_order'][$key]['price']=$price;
     }
    }
    $tot=$price_total;
    $modx->setPlaceholder('total', "$tot");
    }
    

    Прошу прощения за говнокод, приведу в порядок в ближайшее время.

 

Последние комментарии

  • Я не знаю как тебе объяснить, что твой продукт гавно. Что шопкипер, что catalogfil - полное кривое гавно

    Зачем ты мучаешь себя? Не пользуйся. Другие продукты тоже все "говно", или может говно у тебя в голове?

    Ты хоть сам тестировал свою хрень в подобной ситуации? Нормальный функционал и документацию ты сделать поленился

    Много я таких как ты встречал. У вас всегда кто-то другой виноват. До таких "умников" даже не доходит, что в продукте может отсутствовать требуемый им функционал. И это нормально. Ты хотел многофункциональный комбайн за 500 руб? Я подсказываю обходные пути, но для тебя это слишком сложно (это я про другие темы этого автора).

    видимо с той целью что бы выклянчить копеечку

    С таких как ты мне ничего не надо. Лучше просто забудь о существовании Шопкипера и CatalogFill.

    Давай отвечай

    Зачем мне это? Ни за один ответ я не получил от тебя даже "спасибо".

    или просто кинь ещё 1 бан, хоть власть почувствуешь)))

    Моему терпению можно только позавидовать. Ты заслужил бан уже очень давно.

    Читать далее
  • V

    @Andchir Я не знаю как тебе объяснить, что твой продукт гавно. Что шопкипер, что catalogfil - полное кривое гавно. Я тебе пытаюсь объяснить, что товар или добавляется дублями или изменяются параметры у товаров с таким же артикулом, ты же мне рассказываешь про кнопочки "Добавить" и "Обновить". Ты хоть сам тестировал свою хрень в подобной ситуации? Нормальный функционал и документацию ты сделать поленился, видимо с той целью что бы выклянчить копеечку. Все эти функции должны были быть описаны в документации. Есть демо сайт, есть галерея в нём, значит и импорт должен производиться под этот сайт и всё было бы понятно. Давай отвечай или просто кинь ещё 1 бан, хоть власть почувствуешь)))

    P.S: Весь мой вопрос можно было решить за 1 день, после первого поста.

    Читать далее
  • Ещё один момент, если вам нужно добавить товар, то нужно нужно переключатель "Тип импорта" ставить в положение "Добавить". Но делаете ли вы так - такой информации я тоже не увидел. Вытаскивать из вас информацию по кусочкам - слишком долго.

    Читать далее
  • Вы отправляетесь в бан на 2 дня. Каждый раз одно и то же. Мне не нужна информация сколько вы раз возвращали резервную копию. Но нужен полный конфиг, а не кусочки. При этом нормальная информация "делаю так - получаю так", а не "получаю так или так" (не известно при каких действиях).

    У меня изначально стоял параметр false, я пробую и так и сяк

    Не нужно пробовать "так и сяк", нужно делать так как написано и так как правильно по смыслу описания параметров. После этого писать на форуме, что "делаю как должно быть, но получается не так". Если вы что-то пробуете, что вообще не правильно по смыслу, то мне об этом писать не нужно.

    Читать далее