我使用Admin -> Sales -> Terms & Conditions
创建了两个签出条款和条件。
根据结帐总额,如何仅显示其中一个?
例如,如果总计少于$2000,则显示第一个条款和条件。如果总数超过2000美元,则显示第二个。
第二个问题是如何在条款和条件文本中插入金额?
最佳答案
筛选协议的代码位于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): ?>
....
在本例中,您将拥有两个名为“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 total}。
关于php - Magento中的动态条款和条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9709090/