2011-07-29 11 views
14

app\locale\en_US\template\email\sales\order_new.html es el archivo en cuestión.Edición del bloque de pago de correo electrónico de ventas de Magento

¿Cómo se puede editar {{var payment_html}} sin afectar otras secciones del sitio?

Parece que la sección proviene de: app\design\frontend\base\default\template\payment\info\default.phtml

Estoy en lo correcto acerca de esto? Pero ese archivo se usa en otros lugares del sitio. ¿Es eso correcto también?

Quiero crear un archivo separado, digamos default_email.phtml, configúrelo por separado y tenga order_new.phtml para incluir el nuevo archivo.

Supongo que tengo que incluir mi archivo default_email.phtml en layout\***.xml. ¿Dónde haría esto?

Respuesta

0

En /app/code/core/Mage/Sales/Model/Order.php hay un método llamado "sendNewOrderEmail". Esto es lo que debes afectar. Va a encontrar el código del mismo tipo que la siguiente:

$mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$this->getStoreId())) 
       ->sendTransactional(
        $template, 
        Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $this->getStoreId()), 
        $recipient['email'], 
        $recipient['name'], 
        array(
         'order'   => $this, 
         'billing'  => $this->getBillingAddress(), 
         'payment_html' => $paymentBlock->toHtml(), //Just change this line 
        ) 
       ); 

Se puede ver que aquí es donde los datos "payment_html" consigue el sistema. Simplemente cambie a lo que quiere que sea.

6

Lo primero que hice fue buscar en el código fuente de Magento. Suponiendo que el {{var payment_html}} se procesa en algún lugar que busqué en payment_html. Varios resultados coinciden con la búsqueda;

Mage_Sales_Model_Order 
Mage_Sales_Model_Order_Creditmemo 
Mage_Sales_Model_Order_Invoice 
Mage_Sales_Model_Order_Shipment 

Entonces la información para ese bloque de pago tiene que estar allí. Tomé Mage_Sales_Model_Order y compruebe la variable $paymentBlockHtml. Esto apunta a una lógica adicional para completar el bloque de pago mediante información de pago. Está creando un bloque y parece que esto no es fácil de ampliar/cambiar/modificar a primera vista. Sí, podemos aplicar una plantilla al tipo de bloque específico (de pago) ya que hay un bloque creado, pero no podemos verificar fácilmente qué bloque queremos cargar. Además, la plantilla se invalida en la construcción de Mage_Payment_Block_Info

Veamos la otra forma.

Hagamos algo interesante, por qué no agregamos un bloque al correo electrónico que contiene la información correcta pero más importante donde es posible cambiar al caso correcto. Como el analizador de plantillas se usa para analizar las variables y los controladores de diseño, podríamos agregar lo siguiente en lugar del bloque {{var payment_html}} y recuperar esa información en el bloque mismo.

{{block type='core/template' template='email/templatename.phtml'}} 

El código anterior es analizar el correo electrónico/templatename.phtml en el correo electrónico, lo que significa que se podía hacer nada en esa plantilla para mostrar los datos correctos. Antes de que podamos recuperar los datos de pago en esta plantilla, tenemos que agregar el argumento de orden con los datos de la orden. Eso es bastante simple;

{{block type='core/template' order=$order template='email/templatename.phtml'}} 

En la plantilla que podemos hacer $this->getOrder()->getPayment() para recuperar la información de pago, o $this->getOrder->getPayment()->toHtml() o procesar los datos de otra manera.

Bonificación; Otra solución es trabajar con controladores de diseño y establecer la plantilla correcta y escribir en layout.xml, debajo de un ejemplo para los artículos de pedido en el mismo correo electrónico. Está funcionando igual que el bloque, pero solo con algunas configuraciones en el diseño xml.

{{layout handle="sales_email_order_items" order=$order}} 
0

Tuve el mismo problema. Lo que hice para cambiar solo el correo electrónico fue agregar lo siguiente a la clase de información de pago.

protected function _construct() { 
    parent::_construct(); 
    $this->setTemplate('payment/info/{new template}.phtml'); 
} 

A continuación, cree la plantilla y el correo electrónico insertará esta plantilla en la sección de pagos si se utiliza este método de pago.

Espero que sea útil!

Cuestiones relacionadas