Trataré de responder a su pregunta inicial: cómo usar la directiva con condición. Para la depuración, uso xDebug. Y en mi opinión es muy difícil depurar correos electrónicos. En ese caso, te muestro un ejemplo con la misma estructura en otra parte de magento.
En ventas / pedido / vista hay la misma estructura. La estructura de salida de dirección determinada en Mage/Core/etc/config.xml
in default/customer/address_templates/text
.
Nuestra tarea será agregar cualquier condición para mostrar o no mostrar 'nombre de la empresa'. Directivas como var , dependen , si de análisis sintáctico en Varien_Filter_Template
en el método de filtro (valor $) . En este método hay una iteración de todas las construcciones $ (if / depend / var) y cada construcción $ utilizada en esta llamada:
$replacedValue = call_user_func($callback, $construction);
Para cada if / depende / var hay su propio método. Miremos apublic function ifDirective($construction)
public function ifDirective($construction)
{
if (count($this->_templateVars) == 0) {
return $construction[0];
}
if($this->_getVariable($construction[1], '') == '') {
if (isset($construction[3]) && isset($construction[4])) {
return $construction[4];
}
return '';
} else {
return $construction[2];
}
}
Ahora veamos el método protegido _getVariable. Me gustaría llamar su atención en una fila:
} elseif (isset($stackVars[$i-1]['variable']) && $stackVars[$i-1]['variable'] instanceof Varien_Object) {
y mira el comentario a continuación:
// If object calling methods or getting properties
Por lo tanto, para hacer que nuestra $ stackVars sea un objeto y una instancia de Varien_Object (la mayoría de los modelos se extiende desde Mage_Core_Model_Abstract, que se extiende desde Varien_Object). Vamos a subir unos pasos más arriba. Necesitamos agregar a stackVars y objeto.
En mi ejemplo en la clase Mage_Customer_Block_Address_Renderer_Default magento llama al filtro de método ($ value), que mencioné anteriormente.
Aquí proporciono una solución. ¡Advertencia! Esta solución no es muy limpia. Su propósito es mostrar el comportamiento de magento. Por favor, reescriba usted mismo.
public function render(Mage_Customer_Model_Address_Abstract $address, $format=null)
{
//parsing $data array
$formater->setVariables($data);
$format = !is_null($format) ? $format : $this->getFormat($address);
return $formater->filter($format);
}
En este método agregaremos un objeto de orden a $ data array. Según mi tarea, agreguemos un objeto de orden a esta matriz. Hazlo antes de '$ formater-> setVariables ($ data);'
$data['order_object'] = $address->getOrder();
Después de este magento analizará este objeto y llamará a cualquiera de sus métodos. Por ejemplo, agregamos un nuevo método getPaymentOutput (). Ponga una funcionalidad simple en la clase Order:
public function isPrinted()
{
if ($this->getPayment()->getMethod() == 'checkmo') {
return true;
} else {
return false;
}
}
y solo después de eso hacemos cambios en la directiva xml con esto:
{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}