我在Magento 1.7.0.2使用货到付款支付方式。
我只需要为某些邮政编码/ PIN码此付款方式。
谁能帮助?
我在Magento 1.7.0.2使用货到付款支付方式。
我只需要为某些邮政编码/ PIN码此付款方式。
谁能帮助?
在COD你有一个函数
public function isAvailable($quote = null)
在这最后的行之前return $checkResult->isAvailable;
你把一个if条件if($checkResult->isAvailable)
调用
$this->isZipCodeallowedForCod($zipCode,$quote)
并在此功能适用的逻辑来得到报价对象账单地址的邮政编码,并允许邮编的列表检查并设置标志。
注:修改这个时候不要修改核心代码重写使用或覆盖的Magento的概念。
URL1- 如何限制默认COD在Magento只有某些邮政编码?
步骤1
转到文件
app\code\core\Mage\Payment\etc\system.xml
线不近596
下<cashondelivery translate="label">
XML节点
添加代码
<pincode translate="label">
<label>pincode</label>
<frontend_type>textarea</frontend_type>
<sort_order>63</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</pincode>
第2步
转到文件
app\code\core\Mage\Payment\Model\Method\Cashondelivery.php
在添加下面的函数Class Mage_Payment_Model_Method_Cashondelivery
关闭标签之前}
/**
* Get All postcode allowed for COD cash on delivary module
* @return array
*/
public function getCODPincodes(){
$pincodes = Mage::getStoreConfig('payment/cashondelivery/pincode');
$results=explode(',',$pincodes);
$postcodes=array();
if(count($results)>0){
foreach($results as $result){
$postcodes[] = $result;
}
}
return $postcodes;
}
步骤-3
转到文件
app\code\core\Mage\Payment\Block\Form\Container.php
广告按照功能Class Mage_Payment_Block_Form_Container
关闭标签之前}
/**
* Chcek Payment Method is COD(cash on delivary) and Shiping Pin code is available in list
* @return boolean
*/
protected function checkmethodbypin($method){
if($method->getCode() == "cashondelivery"){
$shippingPincode = $this->getQuote()->getShippingAddress()->getData('postcode');
$pincodes= Mage::getModel('payment/method_cashondelivery')->getCODPincodes();
if(in_array($shippingPincode, $pincodes)) return true ;else return false;
}
}
第4步
转到文件
app\design\frontend\base\default\template\checkout\onepage\payment\methods.phtml
查找代码近43线
<?php if(!$oneMethod): ?>
<input id="p_method_<?php echo $_code ?>" value="<?php echo $_code ?>" type="radio" name="payment[method]"title="<?php echo $this->htmlEscape($_method->getTitle()) ?>" onclick="payment.switchMethod('<?php echo $_code ?>')"<?phpif($this->getSelectedMethodCode()==$_code): ?> checked="checked"<?php endif; ?> class="radio" />
<?php else: ?>
<span class="no-display"><input id="p_method_<?php echo $_code ?>" value="<?php echo $_code ?>" type="radio"name="payment[method]" checked="checked" class="radio" /></span>
<?php $oneMethod = $_code; ?>
<?php endif; ?>
<label for="p_method_<?php echo $_code ?>"><?php echo $this->escapeHtml($this->getMethodTitle($_method)) ?></div><div>
<?php echo $this->getMethodLabelAfterHtml($_method) ?></label>
用。。。来代替
<?php if(($_method->getCode() == "cashondelivery") && !$this->checkmethodbypin($_method)){?>
<dt><label style="color:red">COD (Cash on Delivary) not available on this pin code</label></dt>
<?php }else{?>
<dt>
<?php if(!$oneMethod): ?>
<input id="p_method_<?php echo $_code ?>" value="<?php echo $_code ?>" type="radio" name="payment[method]"title="<?php echo $this->htmlEscape($_method->getTitle()) ?>" onclick="payment.switchMethod('<?php echo $_code ?>')"<?phpif($this->getSelectedMethodCode()==$_code): ?> checked="checked"<?php endif; ?> class="radio" />
<?php else: ?>
<span class="no-display"><input id="p_method_<?php echo $_code ?>" value="<?php echo $_code ?>" type="radio"name="payment[method]" checked="checked" class="radio" /></span>
<?php $oneMethod = $_code; ?>
<?php endif; ?>
<label for="p_method_<?php echo $_code ?>"><?php echo $this->escapeHtml($this->getMethodTitle($_method)) ?> <?phpecho $this->getMethodLabelAfterHtml($_method) ?></label>
</dt>
<?php } ?>
打开你的应用程序\设计\前台\基地\ DEFAULT \模板\结账\ onepage \金\ methods.phtml文件。
在这个文件中,你可以从报价对象获取报价送货地址,从地址和内只得到邮政编码foreach ($methods as $_method):
检查你的病情,如果邮政编码和$_method->getCode();
比赛然后返回。 你可以在这里获取方法的代码。
我做了以下
在应用程序\代码\本地\法师\付款方式\型号\方法\ Cashondelivery.php
我增加了以下功能
public function getCODPincodes(){
$write = Mage::getSingleton('core/resource')->getConnection('core_read');
$query = "select pincode from `pincode`";
$results = $write->fetchAll($query);
foreach($results as $result){
$postcodes[] = $result['pincode'];
}
return $postcodes;
}
在应用程序\代码\本地\法师\付款方式\块\表格\ Container.php
我补充下,下面的代码protected function _canUseMethod($method){
...
以下块之后
if((!empty($minTotal) && ($total < $minTotal)) || (!empty($maxTotal) && ($total > $maxTotal))) {
return false;
}
加
if($method->getCode() == "cashondelivery"){
$postcodes = Mage::getModel('payment/method_cashondelivery')->getCODPincodes();
$shippingPincode = $this->getQuote()->getShippingAddress()->getData('postcode');
if(!in_array($shippingPincode, $postcodes)){
return false;
}
}
注意:
我有一个表叫pin码。所有pincodes。
我会制定这样的小模块,因为这是我的要求速战速决
您只需编辑文件/app/code/core/Mage/Payment/Model/Method/Cashondelivery.php
打开它,下面的代码添加到类(之前只是文件中的最后一个“}”)的末尾:
public function isAvailable($quote = null)
{
if ($quote) {
// Here is the list of restricted Zip Codes
$restrictedZips = array(
'85001',
'87965'
);
$address = $quote->isVirtual() ? $quote->getBillingAddress() : $quote->getShippingAddress();
$customerZip = $address->getPostcode();
if (in_array($customerZip, $restrictedZips)) {
return false;
}
}
return parent::isAvailable($quote);
}