我收到了客户的请求,他们希望在Magento中添加额外的国家/地区。 例如,与“英国”一起,我们添加了“威尔士”,“苏格兰”,“英格兰”。
我已遵循指南:http://www.magentoworks.net/how-to-add-new-country-in-magento 并在管理面板中设置新国家/地区以进行送货。 这很好并且有效,但是指南提到需要在数据库中使用唯一的国家代码。
出现的问题是网站使用的支付网关只接受默认的Magento网站,因为网站上添加的国家是装饰性的,我认为最好的想法是在结账时,一旦发货地址选择然后我可以检查任何新的国家/地区代码,然后将它们设置为“英国”国家/地区代码。
我在尝试让它发挥作用时遇到了问题。通过查看shipping.phtml,选择的国家/地区将被调用:
<label for="shipping:country_id" class="required"><em>*</em><?php echo $this->__('Country') ?></label>
<div class="input-box">
<?php echo $this->getCountryHtmlSelect('shipping') ?>
</div>
我已经找到了这个功能:
public function getCountryHtmlSelect($type)
以下是:
Mage/Checkout/Block/Onepage/Abstract.php
从这里我试图覆盖并自定义该功能,这样如果国家代码是自定义代码之一,那么它将设置为'GB',我希望它可以工作:
public function getCountryHtmlSelect($type)
{
$countryId = $this->getAddress()->getCountryId();
if($countryId == 'ZD' || $countryId == 'ZB' || $countryId == 'ZC'):
$newCountryId = "GB";
else:
$newCountryId = $countryId;
endif;
if (is_null($countryId)) {
$countryId = Mage::helper('core')->getDefaultCountry();
}
$select = $this->getLayout()->createBlock('core/html_select')
->setName($type.'[country_id]')
->setId($type.':country_id')
->setTitle(Mage::helper('checkout')->__('Country'))
->setClass('validate-select')
->setValue($newCountryId)
->setOptions($this->getCountryOptions());
if ($type === 'shipping') {
$select->setExtraParams('onchange="if(window.shipping)shipping.setSameAsBilling(false);"');
}
return $select->getHtml();
}
但是,当我通过结账和付款网关时,我收到了失败(因为它仍在发送自定义国家/地区代码。
当用户刚刚完成结帐的“送货”步骤时,更改单页结帐中的送货国家/地区代码的最佳方法是什么?
非常感谢任何帮助。谢谢。
答案 0 :(得分:1)
试试这个:
您将始终将GB视为国家/地区。
要做#2,你必须覆盖Mage_Checkout_Block_Onepage_Shipping
并添加以下功能。
public function getCountryHtmlSelect($type)
{
$countryId = $this->getAddress()->getCountryId();
if (is_null($countryId)) {
$countryId = Mage::helper('core')->getDefaultCountry();
}
$select = $this->getLayout()->createBlock('core/html_select')
->setName($type.'[country_id2]')
->setId($type.':country_id')
->setTitle(Mage::helper('checkout')->__('Country'))
->setClass('validate-select')
->setValue($countryId)
->setOptions($this->getCountryOptions());
if ($type === 'shipping') {
$select->setExtraParams('onchange="if(window.shipping)shipping.setSameAsBilling(false);"');
}
return $select->getHtml();
}
注意更改行->setName($type.'[country_id2]')
。仅供参考,在Mage_Checkout_Block_Onepage_Abstract
中定义的功能之上,我们只是在这里重新发货。
您还需要在客户地址上添加其他属性以保存country_id2值。您可以轻松完成此http://www.magentocommerce.com/magento-connect/customer-attributes-manager-1.html
这样的扩展