Hello Magento Friends,
Today we will discover How to Add Conditional Statement in Email Template in Magento 2.
An email template is a predefined structure of email that includes text or images. Magento 2 admin can even add conditional statements in the email template to make it dynamic.
Let’s look at the steps to learn how to add conditional statement in Magento 2.
Steps to Add Conditional Statement in Email Template in Magento 2:
Step 1: Create blog file “Index.php” at the below path
app/code/Vendor/Extension/Block/Index
Then add the code as follows
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace Vendor\Extension\Block\Index; class Index extends \Magento\Framework\View\Element\Template { public function __construct(\Magento\Catalog\Block\Product\Context $context, array $data = []) { parent::__construct($context, $data); } protected function _prepareLayout() { return parent::_prepareLayout(); } } |
Step 2: Create controller file “Index.php” at the below-mentioned path
app/code/Vendor/Extension/Controller/Index
Then add the following code-snippet
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace Vendor\Extension\Controller\Index; class Index extends \Magento\Framework\App\Action\Action { public function execute() { $this->_view->loadLayout(); $this->_view->getLayout()->initMessages(); $this->_view->renderLayout(); } } |
Step 3: Create controller file Post.php at the following path
app/code/Vendor/Extension/Controller/Index/Post.php
Then add the following code snippet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<?php namespace Vendor\Extension\Controller\Index; use Magento\Store\Model\StoreManagerInterface; class Post extends \Magento\Framework\App\Action\Action { protected $_inlineTranslation; protected $_transportBuilder; protected $_scopeConfig; protected $_logLoggerInterface; protected $storeManager; public function __construct( \Magento\Framework\App\Action\Context $context, \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory, \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation, \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Psr\Log\LoggerInterface $loggerInterface, StoreManagerInterface $storeManager, array $data = [] ) { $this->_inlineTranslation = $inlineTranslation; $this->_transportBuilder = $transportBuilder; $this->_scopeConfig = $scopeConfig; $this->_logLoggerInterface = $loggerInterface; $this->messageManager = $context->getMessageManager(); $this->storeManager = $storeManager; parent::__construct($context); } public function execute() { try { $post = $this->getRequest()->getPost(); // Send Mail $this->_inlineTranslation->suspend(); $sender = [ 'name' => $post['name'], 'email' => $post['email'] ]; $transport = $this->_transportBuilder ->setTemplateIdentifier('customemail_email_template') ->setTemplateOptions( [ 'area' => 'frontend', 'store' => $this->storeManager->getStore()->getId() ] ) ->setTemplateVars([ 'name2' => $post['name'], 'email2' => $post['email'] ]) ->setFromByScope($sender) ->addTo($post['email'],$post['name']) ->getTransport(); $transport->sendMessage(); $this->_inlineTranslation->resume(); $this->messageManager->addSuccess('Email sent successfully'); $this->_redirect('email/index/index'); } catch(\Exception $e){ $this->messageManager->addErrorMessage("Something Went Wrong"); } } } |
Step 4: Create an “email_index_index.xml” file for the front side form display at the below path
app/code/Vendor/Extension/view/frontend/layout
Then add the below piece of code
1 2 3 4 5 6 7 8 9 10 11 12 |
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd"> <head> <title>Inquiery Form</title> </head> <body> <referenceContainer name="content"> <block class="Vendor\Extension\Block\Index\Index" name="customermail_index_index" template="Vendor_Extension::form.phtml"/> </referenceContainer> </body> </page> |
Step 5: Create form template “form.phtml” at the below path
app/code/Vendor/Extension/view/frontend/templates
Now add the following fragment of code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<form enctype="multipart/form-data" action="<?php echo $block->getBaseUrl().'email/index/post/';?>" name="customemaildata" method="post" id="contactForm-1" data-hasrequired="<?php echo __('* Required Fields') ?>" data-mage-init='{"validation":{}}'> <fieldset class="fieldset"> <div class="field email required"> <label class="label" for="email"> Product Name :-</label> <div class="control"> <select name="name" id="name"> <option value="0">Please Select</option> <option value="1">Product - 1</option> <option value="2">Product - 2</option> <option value="3">Product - 3</option> <option value="4">Product - 4</option> <option value="5">Product - 5</option> </select> </div> </div> <div class="field email required"> <label class="label" for="email">Email:-</label> <div class="control"> <input name="email" id="email" class="input-text" type="email" data-validate="{required:true, 'validate-email':true}"/> </div> </div> </fieldset> <div class="actions-toolbar"> <div class="primary"> <input type="hidden" name="hideit" id="hideit" value="" /> <button type="submit" title="<?php echo __('Submit') ?>" class="action submit primary"> <span><?php echo __('Submit') ?></span> </button> </div> </div> </form> |
Step 6: Create an email template layout file “email_templates.xml” at the following path
app/code/Vendor/Extension/etc
Now add the following code
1 2 3 4 |
<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Email:etc/email_templates.xsd"> <template id="customemail_email_template" label="Email Form" file="customeremail.html" type="html" module="Vendor_Extension" area="frontend"/> </config> |
Step 7: Create an email html file “customeremail.html” at the path underneath
app/code/Vendor/Extension/view/frontend/email
Then append the code given below
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;"> <div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;"> <table cellspacing="0" cellpadding="0" border="0" height="100%" width="100%"> <tr> <tr> <td valign="top" colspan="5"> <p style="border:1px solid #E0E0E0; font-size:12px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9; text-align:center;"><strong>Product Information</strong></td> </tr> <!-- Method- 1 --> {{depend name}} <tr> <td> <p style="border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;">product Id :- {{var name}} </p> </td> </tr> {{/depend}} <!-- Method - 1 --> <!-- Method- 2 --> {{if email}} <tr> <td> <p style="border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;"> {{var email}} if condition</p> </td> </tr> {{/if}} <!-- Method- 2--> <!-- Method- 3 --> {{block class='Magento\\Framework\\View\\Element\\Template' area='frontend' template='Vendor_Extension::productinformation.phtml' name=$name}} <!-- Method- 3 --> </table> </td> </tr> </table> </div> </body> |
Step 8: Create template file “productinformation.phtml” for conditional value at the below path
app/code/Vendor/Extension/view/frontend/templates
And finally, add the below code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php switch ($this->getData('name')) { case "0": echo "<tr><td><p style='border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;'> No Product Selected</p></td></tr>" ; break; case "1": echo "<tr><td><p style='border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;'> Product 1 Is Selected</p></td></tr>" ; echo "<p> </p>" ; break; case "2": echo "<tr><td><p style='border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;'> Product 2 Is Selected</p></td></tr>" ; break; case "3": echo "<tr><td><p style='border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;'> Product 3 Is Selected</p></td></tr>" ; break; case "4": echo "<tr><td><p style='border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;'> Product 4 Is Selected</p></td></tr>" ; break; case "5": echo "<tr><td><p style='border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;'> Product 5 Is Selected</p></td></tr>" ; break; default: echo "<tr><td><p style='border:1px solid #E0E0E0; font-size:14px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;'> No Record Found</p></td></tr>" ; } |
Conclusion:
By implementing the above steps, you can easily include conditional statements in Magento 2 email templates. Also, learn How to Customize Email Templates in Magento 2.
If you face any trouble, connect with me through the comment part and I will quickly help you find the solution.
Happy Coding!