Magento的动态条款和条件

时间:2012-03-14 19:46:33

标签: php magento

我创建了两个结帐条款&使用Admin -> Sales -> Terms & Conditions的条件。 如何根据结帐总额显示其中一个? 例如,如果总计不到2000美元,则显示第一个条款&条件。如果总计超过2000美元,那么显示第二。 第二个问题是如何在条款和条款中插入金额?条件文本?

2 个答案:

答案 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组是零售组,请复制其他组的代码。