Шаблон электронной почты Magento, если заявления - PullRequest
21 голосов
/ 25 января 2011

Шаблон электронной почты Magento, если утверждения не оцениваются как истинные, когда я ожидаю их.Может кто-нибудь сказать мне, что не так?Взгляните на следующий код:

{{var customer.group_id}}
{{if customer.group_id}}Print true{{else}}Print false{{/if}}
{{if customer.group_id==4}}Print true{{else}}Print false{{/if}}
{{if customer.group_id=4}}Print true{{else}}Print false{{/if}}
{{if customer.group_id eq 4}}Print true{{else}}Print false{{/if}}

Вывод

4
Print True
Print False
Print False
Print False

Я попытался поместить кавычки вокруг 4, но результат тот же.Как мне оценить равенство с шаблоном электронной почты magento, если выписки?

Ответы [ 4 ]

32 голосов
/ 08 июля 2011

Я решил эту проблему, используя технику «блока».

Что вы делаете, вы передаете приказ в блок, а затем выполняете свою логику внутри этого блока.

Хотя мое решение для другой проблемы, подход должен работать здесь.

Я хотел иметь опцию оплаты чеком и дополнительный текст в электронном письме с подтверждением, напоминающим о необходимости оплаты. Я добавил это в новый шаблон заказа:

{{block type='core/template' area='frontend' template='paymentstatus/orderemail.phtml' order=$order}}<br />

Затем я создал файл app/design/frontend/default/default/template/paymentstatus/orderemail.phtml

Это имеет логику «если», в моем случае я хотел посмотреть, был ли статус заказа для чека, и только потом напоминать клиенту, что его заказу нужны очищенные средства.

<?php if($this->getData('order')->getStatus()=='cheque') {
echo "<p>Please note that we will require your cheque to clear before we can despatch your order.</p>"; }?>
16 голосов
/ 26 января 2011

Копаясь по коду, похоже, что логика шаблона реализована с помощью Varien_Filter_Template (в lib \ Varien not app \ code) в функции filter, которая выдает обратный вызов функции ifDirective, если шаблон соответствуетрегулярное выражениеВ свою очередь ifDirective использует функцию _getVariable для оценки вашего состояния if._getVariable затем токенизирует условие в Varien_Filter_Template_Tokenizer_Variable либо в свойство, либо в метод.

if($this->isWhiteSpace()) {
            // Ignore white spaces
            continue;
        } else if($this->char()!='.' && $this->char()!='(') {
            // Property or method name
            $parameterName .= $this->char();
        } else if($this->char()=='(') {
            // Method declaration
            $methodArgs = $this->getMethodArgs();
            $actions[] = array('type'=>'method',
                               'name'=>$parameterName,
                               'args'=>$methodArgs);
            $parameterName = '';
        } else if($parameterName!='') {
            // Property or variable declaration
            if($variableSet) {
                $actions[] = array('type'=>'property',
                                   'name'=>$parameterName);
            } else {
                $variableSet = true;
                $actions[] = array('type'=>'variable',
                                   'name'=>$parameterName);
            }
            $parameterName = '';
        }

Когда условие if определяется как метод, он выполняет этот метод, в противном случае он просто возвращает строковое значение переменной.

Все это означает (я думаю!), Что если вы хотите оценить выражение внутри оператора if, вам нужно добавить новый атрибут клиента (для этого есть расширения), который может оценить шаблон.Так что если вы определяете логический атрибут «isMemberOfGroupNameX», то шаблон должен работать.

Я думаю, это не тот ответ, который вы ищете, но я вполне уверен, что это так.

HTH, JD

7 голосов
/ 14 августа 2011

Мне удалось более или менее выполнить это право в шаблоне, используя {{зависимость}} теги шаблона.

{{depend somevar}}
Print this if somevar evaluates to true
{{/depend}}

Вам придется вызвать эту переменную в app / code / local / Mage / Sales / Model / Order.php в таких методах, как sendNewOrderEmail () и т. Д.

0 голосов
/ 19 сентября 2014

В обычных блоках / классах Magento вы используете $customer->getGroupId() для доступа к значению идентификатора группы. Эквивалент шаблона CMS / Email - customer.getGroupId(), а не customer.group_id, как вы написали.

...