2016-05-27 2 views
0

У меня возникли некоторые проблемы, связанные с некоторыми вычислениями. У меня есть страница продукта, и на этой странице продукта у меня есть некоторые связанные продукты, которые можно приобрести как группу по сниженной цене. У меня все работает, но у меня проблемы с выпуском родительского продукта из расчета/дисконтированного процента.Опущение родительского продукта из расчета

Код ниже удаляет родительский продукт со скидкой, но если я добавлю другую группу в корзину, он будет опускать только первого родителя, а не нового добавленного родителя.

Как я могу проверить $ buy_together_id и подтвердить только первый из каждого продукта с уникальным идентификатором, который исключен из расчета дисконта?

Мое последнее дополнение к коду для решения этой проблемы - оба экземпляра if ($ k! = 0), но опять же это проверка только для первого родителя, а не для всех родителей.

Спасибо,

Sergio

<?php 

    global $config, $current_area; 

    if ($current_area != 'C' || !function_exists('func_bt_distribute_discount')){ 
     return; 
    } 

    $discount_to_add = 0; 
    $group_discounts = array(); 

    $bts_in_cart = array(); 
    foreach ($products as $k => $v){ 
     if ($k != 0) { 
      if ($v['buy_together_id']){ 
       foreach ($v['buy_together_id'] as $gid){ 
        $bts_in_cart[$gid][] = $v['productid']; 
       } 
      } 
     } 
    } 

    // Go through each product and calculate discount to be applied. // 

    foreach ($products as $k => $v){ 

     if ($k != 0) { 

      if ($v['buy_together_id']){ 

       foreach ($v['buy_together_id'] as $buy_together_id){ 

        $_discount = 0; 

        if (!isset($GLOBALS['group_bt_discounts'][$buy_together_id])){ 
         $GLOBALS['group_bt_discounts'][$buy_together_id] = func_query_first('SELECT * FROM xcart_buy_together_groups 
                          WHERE groupid='.intval($buy_together_id)); 
        } 

        $g_discount = $GLOBALS['group_bt_discounts'][$buy_together_id]; 
        $price = defined('BT_ADD_TAXES') && BT_ADD_TAXES && $v['taxed_price'] ? $v['taxed_price'] : $v['price']; 

        // Discount // 
        if ($g_discount['discount']){ 
         if ($g_discount['discount_type'] == 'P'){ 
          $_discount = ($price/100) * $g_discount['discount']; 
         } else { 
          $_discount = $g_discount['discount']/count($bts_in_cart[$buy_together_id]); 
         } 
        } 

        if ($_discount > 0){ 

         /* Add to discount for the quantity */ 
         if ($config['Buy_Together']['bt_apply_to_all'] == 'Y'){ 
          $_discount *= $v['amount']; 
         } 

         // Change the product discount // 
         $products[$k] = func_bt_distribute_discount($products[$k], $_discount); 

        } 

        /* Cumulative total */ 
        $discount_to_add += $_discount; 
       } 
      } 
     } 

    } 

    $return['products'] = $products; 
    $return['discount'] = $discount+$discount_to_add; 
    $return['discount_orig'] = $discount+$discount_to_add; 
?> 
+0

Нам не хватает информации, необходимой для решения этой проблемы. – cmorrissey

+0

@cmorrissey Это часть файла плагина для X-Cart. Не совсем уверен, какие другие данные/информация вам нужны. Я связался с продавцом плагина, и он сказал, что не может внести изменения, но файл для изменения - тот, который я включил выше. – Sergio

+0

пометьте свой вопрос этими тегами! имя плагина и т. д. – cmorrissey

ответ

0

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

foreach ($products as $k => $v){ 
    if ($k != 0) { 
    // ...... 
    } 
} 

, а не если ($ k! = 0).

+0

Я не уверен, что вижу разницу между вашим примером и тем, что я включил. Спасибо, кстати. – Sergio

+0

Нет никакой разницы, потому что это фрагмент кода из вашего примера :) Могу сказать, что вы можете добавить дополнительный флаг к информации о продукте, которая будет указывать на родительский продукт, поэтому, когда вы переключаетесь с массива продуктов как на foreach ($ products as $ k => $ v) вы можете использовать условие, отличное от if ($ k! = 0). Трудно дать более точную инструкцию, так как у меня нет кода мод. – Tony