2016-09-20 2 views
-1

мне нужно реализовать простую функцию к моей Prestashop (v1.6.1.0):Сортировать доступные носители, основанные на корзину продуктов

Основываясь на содержании корзину (отсылок) Мне нужно сортировать носители, которые будут доступны для пользователя на четвертой странице «Отгрузка»/вкладке.

В качестве примера: у меня есть 3 перевозчика, но одна из тем должна быть удалена, только если одна из ссылок на товарные позиции корзины начинается с 1 (это означает, что она является свежей пищей и не может быть отправлена ​​через этот носитель).

Как я могу это сделать?

+1

Это не сайт поддержки или KB для Prestashop, а сообщество разработчиков. что ты уже испробовал? https://stackoverflow.com/help/mcve –

ответ

0

Функция переопределения getAvailableCarrierList от Carrier класс.

Редактировать заключительный цикл:

if ($product->width > 0 || $product->height > 0 || $product->depth > 0 || $product->weight > 0) 
{ 
    foreach ($carrier_list as $key => $id_carrier) 
    { 
     $carrier = new Carrier($id_carrier); 

     // Get the sizes of the carrier and the product and sort them to check if the carrier can take the product. 
     $carrier_sizes = array((int)$carrier->max_width, (int)$carrier->max_height, (int)$carrier->max_depth); 
     $product_sizes = array((int)$product->width, (int)$product->height, (int)$product->depth); 
     rsort($carrier_sizes, SORT_NUMERIC); 
     rsort($product_sizes, SORT_NUMERIC); 

     if (($carrier_sizes[0] > 0 && $carrier_sizes[0] < $product_sizes[0]) 
      || ($carrier_sizes[1] > 0 && $carrier_sizes[1] < $product_sizes[1]) 
      || ($carrier_sizes[2] > 0 && $carrier_sizes[2] < $product_sizes[2])) 
     { 
      $error[$carrier->id] = Carrier::SHIPPING_SIZE_EXCEPTION; 
      unset($carrier_list[$key]); 
     } 

     if ($carrier->max_weight > 0 && $carrier->max_weight < $product->weight * $cart_quantity) 
     { 
      $error[$carrier->id] = Carrier::SHIPPING_WEIGHT_EXCEPTION; 
      unset($carrier_list[$key]); 
     } 


     //Here goes the magic 
     foreach ($cart->getProducts(false, $product->id) as $cart_product) { 
      $aProduct = new Product($cart_product['id_product']); 
      if (substr($aProduct->reference, 0, 1) == 1) { 
       unset($carrier_list[$key]); 
      } 
     } 


    } 
} 

return $carrier_list; 

Еще лучше, нет необходимости переопределять функции управления:

public static function getAvailableCarrierList(Product $product, $id_warehouse, $id_address_delivery = null, $id_shop = null, $cart = null, &$error = array()) 
{ 
    $carrier_list = parent::getAvailableCarrierList($product, $id_warehouse, $id_address_delivery, $id_shop, $cart, &$error); 

    if (is_null($cart)) 
     $cart = Context::getContext()->cart; 

    if ($product->width > 0 || $product->height > 0 || $product->depth > 0 || $product->weight > 0) 
    { 
     foreach ($carrier_list as $key => $id_carrier) 
     { 
      //Here goes the magic 
      foreach ($cart->getProducts(false, $product->id) as $cart_product) { 
       $aProduct = new Product($cart_product['id_product']); 
       if (substr($aProduct->reference, 0, 1) == 1) { 
        unset($carrier_list[$key]); 
       } 
      } 
     } 
    } 

    return $carrier_list; 
} 

непроверенная.