2017-05-08 12 views
0

私は、クライアントが注文ページ(注文のステップ2)に入ったときにキャリア価格を変更するモジュールを開発しています。顧客として注文ページに到着すると、prestashopは私のモジュールコードで私のメソッドgetPackageShippingCostを呼び出します:PrestaShopは、ファンクションでキャリア価格を設定します。オーバーライドしないカスタムモジュールのgetPackageShippingCost

public function getPackageShippingCost($ id_carrier = null、$ use_tax = true、$ default_country = null、$ product_list = null、$ id_zone = null )

モジュールで受け取った$ id_carrierは実際には$ id_carrierではないことがわかります。代わりに実際のカートオブジェクトであることがわかります。そのため、ordにはそのカートに表示されているキャリアのリストが必要ですエルページ。

現在、私は文でcariersのリストを取得しようとしている: $キャリア=キャリア:: getCarriers($ cookie-> id_lang、真、偽、偽、NULL、PS_CARRIERS_AND_CARRIER_MODULES_NEED_RANGE)。

GetPackageShippingCostはPrestaShopによって数回呼び出されますが、$ carrier var i getは常に同じですが、そうでなければ常に関数に値段を返す必要があります。価格は無料で返されます。問題は、特定のキャリアの反復を検出する。

問題はclasess/Cart.phpを変更またはオーバーライドして解決されますが、オーバーライドする必要はありません。メソッドgetPackageShippingCostをモジュールにするだけで可能です。

多くのありがとうございます。

+0

何が必要とするid_cartによって利用可能なキャリアのリストである、ことを再開 –

答えて

0

最後に、オーバーライドを変更します。最悪の解決策ですか?

class Cart extends CartCore 

{

public function getPackageShippingCost($id_carrier = null, $use_tax = true, Country $default_country = null, $product_list = null, $id_zone = null) 
{ 
    global $array_precios; 
    if ($array_precios == null) 
     $array_precios = Tools::jsonDecode(Module::getInstanceByName('mymodule')->buscarPreciosmymodule(Context::getContext()->cart->id, false), true); 
    if (!Module::getInstanceByName('mymodule')->isMyModuleCarrier($id_carrier)) { 
     return parent::getPackageShippingCost($id_carrier, $use_tax, $default_country, $product_list, $id_zone); 
    } 
    $objCarrier = new Carrier($id_carrier); 
    if (array_key_exists($objCarrier->url, $array_precios)) 
    {    
     return($array_precios[$objCarrier->url]['importe']); 
    } 
} 

}

関連する問題