我创建了两个Checkout条款&条件使用Admin -> Sales -> Terms & Conditions
。 根据结帐总额,我怎样才能显示其中的一个? 例如,如果总计少于2000美元,则显示第一条款&条件。如果总计超过2000美元,则显示第二。 第二个问题是我如何在条款&条款文本中插入金额?Magento中的动态条款和条件
3
A
回答
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
如果要过滤按名称在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是零售组,则复制其他组的代码。
相关问题
- 1. informix:where条款中的动态条件
- 2. 连接条款中的条件和条款
- 3. Magento的条款和条件字符数上限
- 4. Django条款和条件表
- 5. GCM条款和条件
- 6. 你可以'拉'条款和条件从magento和使用在magento分离页面
- 7. Magento Checkout条款和条件,它们存储在哪里?
- 8. 动态LINQ组按条款
- 9. LINQ动态从条款
- 10. 条件中有条款
- 11. 如果条件在MySQL查询生成的条款动态
- 12. 有大条款的条件
- 13. PL/SQL动态SQL中使用条款
- 14. Magento:根据条件动态重写URL?
- 15. 服务条款和缓存条款
- 16. JQuery条款和条件加密狗
- 17. 在AppDelegate上显示条款和条件
- 18. WooCommerce翻译条款和条件链接?
- 19. 条款和条件 - ESP - Google Schemas
- 20. WHERE条款中的多个OR条件
- 21. SQL:如果where条款中的条件
- 22. SQL优化where条款中的条件
- 23. 连续(有条件)Linq中的条款
- 24. Where条款中的条件 - SQL Server
- 25. 带条纹的动态付款
- 26. Linq多条款条件如果条件
- 27. PayPal快速(或任何明示选项) - Magento的 - “条款和条件”
- 28. 的Magento /贝宝 - 请同意所有条款和条件下订单
- 29. 多条件条款SQL
- 30. 动态LINQ和条件
对于任何遇到此解决方案的人来说,建议是正确的,只是更改前端模板只会更改结帐时显示的条款和条件。您还需要通过mage/checkout/helper/data.php中的帮助器函数getRequiredAgreementIds过滤要使用的术语。否则,您将显示正确的条款,但使用帮助程序的提交功能逻辑会抱怨在您更改帮助程序功能之前没有满足条款。 – paj 2012-12-14 16:40:48