我创建了两个结帐条款&使用Admin -> Sales -> Terms & Conditions
的条件。
如何根据结帐总额显示其中一个?
例如,如果总计不到2000美元,则显示第一个条款&条件。如果总计超过2000美元,那么显示第二。
第二个问题是如何在条款和条款中插入金额?条件文本?
答案 0 :(得分: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');
}
这只返回允许的商店范围内的活动协议集合。模板文件调用此方法(checkout / 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): ?>
....
在这个例子中,你有两个术语&amp;名为'lt2000'和'gt2000'的条件(或更多 - 具有相同的名称但分配给不同的商店/网站范围)。但是,此代码不会考虑可能需要在结帐页面上显示的其他协议。
为了回答第二个问题,this是如何将自定义变量添加到静态块的一个很好的参考。在您的情况下,您只需要将变量名称和值更改为您需要的值,并通过filter方法传递$ _a-&gt; 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 total}}。
答案 1 :(得分:0)
如果要过滤您在admin中按名称配置的条款和条件,则需要更改Mage Checkout Block Agreements类中的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组是零售组,请复制其他组的代码。