This post tries to explain every possible way to use blocks in Magento 2 email templates.
It is possible to include blocks in our email templates. In general we just need to specify the class
of a block. Let us assume that we have the following template under the path
Lesti_Example::email/exampletemplate.phtml
.
<?php
echo "Hello, I'm a PHP template";
We can include this template in our email template with the following code.
{{block class='Magento\\Framework\\View\\Element\\Template' area='frontend' template='Lesti_Example::email/exampletemplate.phtml'}}
Please note, we can also use more advanced class
blocks. That way it should be easy to create a small
product list in your email templates. We can also inject variables from our email template into the block. For
example Magento_Sales::email/shipment_new.html
is injecting $shipment
and
$order
into template Magento_Sales::email/shipment/track.phtml
.
{{block class='Magento\\Framework\\View\\Element\\Template' area='frontend' template='Magento_Sales::email/shipment/track.phtml' shipment=$shipment order=$order}}
Magento will always use the toHtml
function to render a block. But you can also specify a output
function with the parameter output
. Every parameter that is not class
, id
or
output
will be automatically injected into the block.
Sometimes called static blocks, content blocks or CMS blocks. CMS blocks are a special case. Magento will always
render a Magento\Cms\Block\Block
if no class
parameter is given. You will just need the
id
parameter. Let us assume we have the following CMS block in our database.
key | value |
---|---|
ID | 51 |
Content | <h1>Hello, I'm a CMS testblock</h1> |
We want to include this CMS block in our email template. We can do this with the following code in our email Template Content.
{{block id="51"}}