Mostrar línea en correo electrónico transaccional si el método de pago es

8

Quiero mostrar una línea solo cuando el cliente selecciona el método de pago y pago del giro postal. Cuando un cliente selecciona un giro postal como método de pago, quiero mostrar una <li>línea adicional al correo electrónico de la transacción.

Si el cliente selecciona otro método de pago, el adicional <li>debe estar oculto.

Intenté este código, pero eso no funciona:

{{depend order.getPayment().getMethod() == "checkmo"}}
    <li>payment check</li>
{{/depend}}

¿Cómo puedo lograr eso?

JGeer
fuente

Respuestas:

7

En este caso, puede gestionar esto mediante un controlador.

Usar controlador:

Cree un controlador y defínalo en el archivo de diseño:

create a handlery el uso de este controlador representa un archivo phtml. Encendido local.xmlen app/design/frontend/YOUR_PAackage/YOUR_template/layoutdefinir controlador.

Código de archivo de diseño como:

    <?xml version="1.0"?>
    <layout version="0.1.0">
<!-- add new handler -->
        <amit_customer_addhan>
            <block type="core/template" name="addNewLi" template="sales/showcheckmo.phtml" />
        </amit_customer_addhan>
    </layout>

Llame a este controlador en la plantilla de correo electrónico

Entonces on email html call this handler(locale/YourLANG/template/email/)

{{layout handle="amit_customer_addhan" order=$order}}

código de archivo phtml:

Luego en phtml fileponer código comoshow extra li

  <?php if($this->getOrder()->getPayment()->getMethodInstance()->getCode()=='checkmo'):?>
      <li>payment check</li>
     <?php endif;?>

Editar: ubicación de phtml filees: app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

O: Sin llamada del manejador:

llamar a un archivo de bloque sin controlador de diseño y parámetro ans para

 {{block type='core/template' area='frontend' template='sales/showcheckmo.phtml' order=$order}}

En este caso, será necesario que ajuste a mangento areacomo frontendcomo archivo phtml llamar de aquí

Amit Bera
fuente
Hola Amit, ¿dónde puedo encontrar el archivo showcheckmo.phtml o dónde necesito crearlo?
JGeer
actualizado, verifique
Amit Bera
Lo intenté, pero eso no funciona. La línea no se muestra dentro del correo electrónico.
JGeer
Intenta poner contenido estático en phtml. Y CKD el texto viene o no
Amit Bera
No también con contenido estático no funciona. ¿Qué estoy haciendo mal?
JGeer
0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'
eetzen
fuente
Intenté eso, pero eso tampoco funcionó :(
JGeer
0

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.xmlin 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_Templateen 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}}
zhartaunik
fuente