回答
你有一個函數
public function isAvailable($quote = null)
在最後一行之前return $checkResult->isAvailable;
你把一個if條件if($checkResult->isAvailable)
呼叫
$this->isZipCodeallowedForCod($zipCode,$quote)
,並在此功能適用的邏輯來獲得計費從報價對象中找到郵政編碼並檢查允許的郵編列表並設置標誌。
注意:修改時不要修改核心代碼,使用重寫或覆蓋Magento的概念。
打開您的應用程序\設計\前端\基地\默認\模板\簽出\ onepage \ payment \ 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;
}
和應用\ code \ local \ Mage \ Payment \ Block \ Form \ 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。
我將開發這個小模塊,因爲這是一個快速解決我的要求
URL1- How to restrict default COD in magento to certain zip codes only?
STEP 1
轉到文件
app\code\core\Mage\Payment\etc\system.xml
Line no 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>
STEP 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;
}
STEP-3前10 轉到文件
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 } ?>
永遠不要修改核心。 Magento開發中的第1課 – 2015-07-22 12:56:36
所有你需要的是編輯文件/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);
}
- 1. Magento通過郵政編碼限制產品
- 2. Magento網格默認限制
- 3. WooCommerce默認發貨郵政編碼
- 4. 僅限某些用戶的活動管理員默認鏈接
- 5. S3限制文件僅限於某些類型
- 6. Facebook的郵政限制
- 7. 美國郵政編碼位於2郵政編碼的中間?
- 8. 僅限某些文件
- 9. 限制谷歌自動完成的郵政編碼
- 10. 如何限制用戶註冊僅限Firebase中的某些域名?
- 11. 如何Magento的身影了應用默認限制
- 12. java限制某些類的反編譯
- 13. MS Access查詢返回的記錄不足,但僅限於某些限制
- 14. 將模板限制爲僅限某些類?
- 15. 將訂閱源限制爲僅限某些類別
- 16. 如何限制某些行的操作?
- 17. 如何限制current_user僅限於Ruby on Rails 3中的已確認用戶?
- 18. HttpGetRequestStream的郵政呼叫限制
- 19. Facebook的5000郵政API限制
- 20. Magento - 將郵政編碼/郵政編碼添加到Magento 1.6.2中的訂單網格中
- 21. Tableau:如何顯示郵政編碼或郵政編碼條目
- 22. Datamapper TEXT默認限制爲65k字符 - 如何提高限制?
- 23. 如何限制採取某些詞
- 24. 如何限制某些字詞?
- 25. 如何限制默認緩存
- 26. Postgres限制參數,默認爲無限
- 27. 如何限制SP列表中的編輯僅限於擁有物品?
- 28. GeoCoder給出了無效的郵政編碼的默認值
- 29. 僅限某些應用程序的Collectstatic
- 30. PHP郵政限於1000個變量
非常感謝,你讓我的一天。 – 2014-01-14 16:45:20