Подтвердить что ты не робот

Шаблон Magento Email If Statementments

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

{{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, если утверждения?

4b9b3361

Ответ 1

Копаясь через код, похоже, что логика шаблона реализована 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, тогда шаблон должен работать.

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

НТН, JD

Ответ 2

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

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

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

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

{{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>"; }?>

Ответ 3

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

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

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

Ответ 4

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