我使用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/

10-09 08:24