email templates magento magento-1.4

email - Plantilla de correo electrónico de Magento si las declaraciones



templates magento-1.4 (4)

La plantilla de correo electrónico de Magento si las declaraciones no se evalúan como verdaderas cuando espero que lo hagan. ¿Puede alguien decirme qué pasa? Eche un vistazo al siguiente código:

{{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}}

El resultado es

4 Print True Print False Print False Print False

Traté de poner comillas alrededor del 4, pero el mismo resultado. ¿Cómo puedo evaluar las igualdades con la plantilla de correo electrónico magento si las declaraciones?


Dentro de los bloques / clases normales de Magento usaría $customer->getGroupId() para acceder al valor de identificación del grupo. El equivalente de la plantilla CMS / Email es customer.getGroupId() , no customer.group_id como usted escribió.


Explorando el código, parece que la lógica de plantilla es implementada por Varien_Filter_Template (en lib / Varien not app / code) en la función de filter que emite una devolución de llamada a la función ifDirective si el patrón coincide con la expresión regular. ifDirective a su vez usa la función _getVariable para evaluar su condición if . _getVariable luego tokenizes la condición en Varien_Filter_Template_Tokenizer_Variable en una propiedad o un método.

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 = ''''; }

Cuando se detecta que la condición if es un método, ejecutará ese método; de lo contrario, simplemente devuelve el valor de cadena de la variable.

Todo lo cual significa (¡creo!) Que si desea evaluar una expresión dentro de la declaración if, necesita agregar un nuevo atributo de cliente (hay extensiones disponibles para esto) que la plantilla puede evaluar. Entonces, si define un atributo booleano "isMemberOfGroupNameX", entonces la plantilla debería funcionar.

Me imagino que esta no es la respuesta que estás buscando, pero estoy bastante seguro de que ese es el caso.

HTH, JD


Pude más o menos cumplir este derecho en la plantilla usando las etiquetas de plantilla {{depends}}.

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

Tendrá que invocar esta variable en la aplicación / code / local / Mage / Sales / Model / Order.php en los métodos como sendNewOrderEmail () y así sucesivamente.


Resolví este problema usando la técnica de "bloque".

Lo que haces es pasar la orden a un bloque y luego hacer tu lógica dentro de ese bloque.

Aunque mi solución es para un problema diferente, el enfoque debería funcionar aquí.

Lo que quería era tener una opción de pago por cheque y un texto adicional en el correo electrónico de confirmación recordándoles que paguen. Lo agregué a la nueva plantilla de pedido:

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

Luego creé una app/design/frontend/default/default/template/paymentstatus/orderemail.phtml archivo app/design/frontend/default/default/template/paymentstatus/orderemail.phtml

Esto tiene la lógica ''si'', en mi caso, quería ver si el estado del pedido era para un cheque y solo luego recordarle al cliente que su orden necesitaba fondos compensados.

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