Como: Crear email templates personalizados en Magento 2


En el post anterior mostré cómo enviar un email programáticamente, pero dejé una pieza fuera a propósito, la plantilla. Aquí te muestro cómo registro una plantilla de email personalizada que viene con el módulo y que aún así puede ser sobreescrita por el comerciante desde el admin.

Este post asume que existe ya un módulo de Magento con la ruta app/code/Vendor/Module. Si necesitas saber cómo crear un nuevo módulo, te recomiendo que le eches un vistazo a Cómo crear un nuevo módulo para Magento 2.

Registrar la plantilla

Las plantillas que viven en el código se declaran en etc/email_templates.xml. El id es lo que luego pasamos a setTemplateIdentifier.

xml
<?xml version="1.0"?>
<!-- app/code/Vendor/Module/etc/email_templates.xml -->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Email:etc/email_templates.xsd">
    <template id="vendor_module_email_template"
              label="My Custom Email"
              file="custom_email.html"
              type="html"
              module="Vendor_Module"
              area="frontend"/>
</config>

El archivo de la plantilla

El archivo referenciado arriba va en view/frontend/email/. Usa la misma sintaxis de directivas que cualquier email de Magento, así que puedes traer variables con {{var ...}} y reutilizar el header y el footer estándar.

html
<!-- app/code/Vendor/Module/view/frontend/email/custom_email.html -->
<!--@subject My Custom Email Subject @-->
{{template config_path="design/email/header_template"}}

<table>
    <tr>
        <td>
            <p>{{trans "Hi %name," name=$customer_name}}</p>
            <p>{{trans "Your order %id has been received and is now being processed." id=$order_id}}</p>
            <p>{{trans "Thanks for shopping with us."}}</p>
        </td>
    </tr>
</table>

{{template config_path="design/email/footer_template"}}
Nota: El comentario @subject en la parte superior define el asunto por defecto, y también acepta variables, por ejemplo <!--@subject Your order {{var order_id}} @-->.

Haciéndola editable desde el admin

Como la declaramos en el email_templates.xml, el comerciante puede ir a Marketing > Email Templates, hacer clic en Add New Template, cargar nuestra plantilla desde el dropdown Template y personalizarla sin tocar el código. Cuando guarda, Magento usa su versión en lugar de la del archivo.

Ejecuta setup:upgrade, limpia la caché, y la plantilla está lista para ser usada por el servicio de envío del post anterior.

Espero que esto ayude.

Si tienes alguna pregunta o conoces una mejor manera de lograr esto, siéntete libre de compartir en los comentarios a continuación.

Related links: