2012-03-14 71 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是零售组,则复制其他组的代码。