Код, который фильтрует соглашения, находится в классе 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 / соглашения.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' (или более - с теми же именами, но назначенными дляразличные области применения магазина / сайта).Однако этот код не учитывает дополнительные соглашения, которые могут потребоваться для отображения на странице оформления заказа.
Чтобы ответить на второй вопрос, этот является хорошим справочным материалом о том, как добавитьпользовательские переменные для статических блоков.В вашем случае вам просто нужно изменить имя и значение переменной на то, что вам нужно, и передать $ _a-> getContent () через метод filter.Затем вы сможете указать эту переменную в тексте ваших условий.
Так, например, ссылаясь на ссылку, вы можете добавить в код вашего шаблона:
$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}} в содержание ваших правил и условий в admin.