2012-03-14 98 views
3

我創建了兩個Checkout條款&條件使用Admin -> Sales -> Terms & Conditions。 根據結帳總額,我怎樣才能顯示其中的一個? 例如,如果總計少於2000美元,則顯示第一條款&條件。如果總計超過2000美元,則顯示第二。 第二個問題是我如何在條款&條款文本中插入金額?Magento中的動態條款和條件

回答

1

可以過濾協議位於Mage_Checkout_Block_Agreements類的代碼:

public function getAgreements() 
{ 
    if (!$this->hasAgreements()) { 
     if (!Mage::getStoreConfigFlag('checkout/options/enable_agreements')) { 
      $agreements = array(); 
     } else { 
      $agreements = Mage::getModel('checkout/agreement')->getCollection() 
       ->addStoreFilter(Mage::app()->getStore()->getId()) 
       ->addFieldToFilter('is_active', 1); 
     } 
     $this->setAgreements($agreements); 
    } 
    return $this->getData('agreements'); 
} 

這只是返回商店允許範圍內活躍協議的集合。模板文件調用此方法(結帳/ onepage/agreements.phtml):

<?php foreach ($this->getAgreements() as $_a): ?> 
    <li> 
     <div class="agreement-content"<?php echo ($_a->getContentHeight() ? ' style="height:' . $_a->getContentHeight() . '"' : '')?>> 
      <?php if ($_a->getIsHtml()):?> 
       <?php echo $_a->getContent() ?> 
      <?php else:?> 
       <?php echo nl2br($this->htmlEscape($_a->getContent())) ?> 
      <?php endif; ?> 
     </div> 
     <p class="agree"> 
      <input type="checkbox" id="agreement-<?php echo $_a->getId()?>" name="agreement[<?php echo $_a->getId()?>]" value="1" title="<?php echo $this->htmlEscape($_a->getCheckboxText()) ?>" class="checkbox" /><label for="agreement-<?php echo $_a->getId()?>"><?php echo $_a->getIsHtml() ? $_a->getCheckboxText() : $this->htmlEscape($_a->getCheckboxText()) ?></label> 
     </p> 
    </li> 
<?php endforeach ?> 

來完成你想要什麼,最簡單的方法可能是修改模板文件。所以,我會想象,像這樣一些邏輯:

$total = Mage::getSingleton('checkout/cart')->getQuote()->getGrandTotal(); 
$agreement_name = ($total < 2000) ? 'lt2000' : 'gt2000'; 
$agreements = Mage::getModel('checkout/agreement')->getCollection() 
    ->addStoreFilter(Mage::app()->getStore()->getId()) 
    ->addFieldToFilter('is_active', 1) 
    ->addFieldToFilter('name', $agreement_name); 
} 
<?php foreach ($agreements as $_a): ?> 
    .... 

在這個例子中,你有兩個方面&條件名爲「LT2000」和「GT2000」(或更多 - 用相同的名字,但分配到不同的店/網站範圍)。但是,此代碼並未考慮可能需要在結帳頁面上顯示的其他協議。

要回答第二個問題,this是如何將自定義變量添加到靜態塊的很好參考。就你而言,你只需要將變量名稱和值更改爲你需要的值,並通過filter方法傳遞$ _a-> getContent()。然後,您將能夠根據條件文本&條件指定該變量。

因此,例如 - 引用鏈接,在你的模板代碼,您可以添加:

$custom_vars = array('total'=>$total); 
$filter = Mage::getModel('core/email_template_filter'); 
$filter->setVariables($custom_vars); 
... 
<?php echo $filter->filter($_a->getContent()) ?> 
... 
<?php echo nl2br($this->htmlEscape($filter->filter($_a->getContent()))) ?> 

然後你就可以添加{{VAR總}}在管理您的條款和條件的內容。

+0

對於任何遇到此解決方案的人來說,建議是正確的,只是更改前端模板只會更改結帳時顯示的條款和條件。您還需要通過mage/checkout/helper/data.php中的幫助器函數getRequiredAgreementIds過濾要使用的術語。否則,您將顯示正確的條款,但使用幫助程序的提交功能邏輯會抱怨在您更改幫助程序功能之前沒有滿足條款。 – paj 2012-12-14 16:40:48

0

如果要過濾按名稱在admin中配置的條款和條件,您需要更改Mage Checkout Block協議類中的getAgreements函數和Mage Checkout Helper Data類中的getRequiredAgreementIds函數。

例如,如果您需要零售客戶組的條款和批發客戶組的條款,您可以在管理中的術語名稱中使用RETAIL和WHOLESALE這個詞創建條款,然後執行類似以下的操作基於名稱的條款。

$groupId = Mage::getSingleton('customer/session')->getCustomerGroupId(); 

if ($groupId == 1) 
{ 
$agreements = Mage::getModel('checkout/agreement')->getCollection() 
->addStoreFilter(Mage::app()->getStore()->getId()) 
->addFieldToFilter('is_active', 1) 
->addFieldToFilter('name', array('like' => '%RETAIL%')); 

} 

如果組1是零售組,則複製其他組的代碼。