Prestashop订单结帐运输国家/地区ID

时间:2015-09-09 11:04:31

标签: smarty prestashop checkout cart prestashop-1.6

我在我的电子商店使用Prestashop 1.6。我开始进行一些升级。 现在我正在堆叠问题以获取客户送货地址的国家名称。

当我在第4步(“送货”)时,有人知道如何从订单结帐的第3步(地址)获取国家名称?

在什么变量($ cart - > ...)中放置了这种类型的信息?

我开始更改order-carrier.tpl并添加 <input type="hidden" value="{$cart->id_address_delivery}"/>结果是我得到一些号码。我没有找到这个数字指向的信息。

<div class="delivery_option_price">
<input type="hidden" value="{$cart->id_address_delivery}"/>
{if $option.total_price_with_tax && !$option.is_free && (!isset($free_shipping) || (isset($free_shipping) && !$free_shipping))}
    {if $use_taxes == 1}
        {if $priceDisplay == 1}
            {convertPrice price=$option.total_price_without_tax}{if $display_tax_label} {l s='(tax excl.)'}{/if}
        {else}
            {convertPrice price=$option.total_price_with_tax}{if $display_tax_label} {l s='(tax incl.)'}{/if}
        {/if}
    {else}
        {convertPrice price=$option.total_price_without_tax}
    {/if}
{else}
    {l s='Free'}

由于

1 个答案:

答案 0 :(得分:1)

默认情况下,Prestashop并未将整个客户地址保持在会话中以达到性能目的,但它会使用$ cart-&gt; id_address_delivery和$ cart-&gt; id_address_invoice属性保留参考。 这两个属性将保存在地址上的id 的 ps_address table,所以如果你想要检索一个地址的所有信息,你所要做的就是创建一个具有给定id的new Address()对象。 我们应该在Controller中执行此操作,正是在CheckO功能所在的ParentOrderController中,我们正在寻找的函数应该是_assignCarrier()。 (Please remember to extend the controller functionality with the override feature Prestashop offers, to avoid un-upgradable code.

在_assignCarrier()函数内部,我们将创建我们的地址对象,然后通过此获取国家/地区名称:

//create an address object by retrieving the id from the current cart.
$address = new Address($this->context->cart->id_address_delivery);
//now the country name will now be in the "$address->country" field so if you want to pass it to your smarty template use:
$this->context->smarty->assign('country_name', $address->country);

最后我们将我们的国家/地区名称提供给我们的模板,因此我们只需要显示它,您的模板中的代码就会变为:

<div class="delivery_option_price">
<input type="hidden" value="{$country_name}"/>