Hey,
I'm new to Magento and I'm trying to use variables in a custom email template I created.
I want to show the date and the available variable it's var created_at_formatted but I need it without the time, just let's say dd/mm/yyy.
I couldn't find any variant to do that is there any or it's needed to override something to do that? and if it's needed what and how
Thanks
Solved! Go to Solution.
Hello @rui_silva1
Try the below solution:
$templateOptions = [ 'area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $this->storeManager->getStore()->getId() ]; $templateVars = [ 'store' => $this->storeManager->getStore(), 'admin_name' => 'Admin', 'subject' => 'subject', 'created_at_formatted' => date("d/m/Y", strtotime($str)); ]; $from = ['email' => 'from@email.com', 'name' => 'from name']; $to= "test@gmial.com" $this->inlineTranslation->suspend(); $transport = $this->transportBuilder->setTemplateIdentifier('template name or id') ->setTemplateOptions($templateOptions) ->setTemplateVars($templateVars) ->setFrom($from) ->addTo($to) ->getTransport(); $transport->sendMessage(); $this->inlineTranslation->resume();
Use in email template {{var created_at_formatted}} variable
Hope it helps.
Hello @rui_silva1
Try the below solution:
$templateOptions = [ 'area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $this->storeManager->getStore()->getId() ]; $templateVars = [ 'store' => $this->storeManager->getStore(), 'admin_name' => 'Admin', 'subject' => 'subject', 'created_at_formatted' => date("d/m/Y", strtotime($str)); ]; $from = ['email' => 'from@email.com', 'name' => 'from name']; $to= "test@gmial.com" $this->inlineTranslation->suspend(); $transport = $this->transportBuilder->setTemplateIdentifier('template name or id') ->setTemplateOptions($templateOptions) ->setTemplateVars($templateVars) ->setFrom($from) ->addTo($to) ->getTransport(); $transport->sendMessage(); $this->inlineTranslation->resume();
Use in email template {{var created_at_formatted}} variable
Hope it helps.
Hey, @Sanjay Jethva
Thanks for your reply, this might be a stupid question but i'm not really familiarized with extending so, where's the best place to put that code or what to extend?
Thanks
Hey @rui_silva1 again,
Please refer https://magento.stackexchange.com/a/203195/24801
Thanks.
Hey again @Sanjay Jethva,
I'm sorry to keep bothering, but there is no way that can just edit the variable or even create one based on that one?
I used extending in /app/code/custom_name/Emails registration.php just to create a custom variable, it's possible use like this just to edit date format
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'custom_name_Emails', __DIR__ );
/app/code/custom_name/Emails/etc events.xml
<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <event name="email_order_set_template_vars_before"> <observer name="custom_name_emails_variable_order" instance="custom_name\Emails\Observer\AddMyData" /> </event> </config>
/app/code/custom_name/Emails/etc module.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="custom_name_Emails" setup_version="1.0.0"> <sequence> <module name="Magento_Sales"/> </sequence> </module> </config>
and /app/code/custom_name/Emails/Observer AddMyData.php
<?php namespace custom_data\Emails\Observer; use Magento\Framework\Event\ObserverInterface; class AddMyData implements ObserverInterface { public function execute(\Magento\Framework\Event\Observer $observer) { $transport = $observer->getTransport(); $transport['myvar'] = 'My Value'; } }
I'm really confused with extending I checked the docs but no luck with understanding the way to do it
(edited)
Sorry and thanks
Hello @rui_silva1
No worries, I'm happy to be of any help
Please try the below code, it may help you:
public function execute(\Magento\Framework\Event\Observer $observer) { /** @var \Magento\Framework\App\Action\Action $controller */ $transport = $observer->getEvent()->getTransport(); $transport['myvar'] = 'My Value'; }
Thanks.
Hello @rui_silva1 ,
Please follow this link https://meetanshi.com/blog/use-custom-variables-in-transactional-email-in-magento-2/
Hey @Sanjay Jethva,
Thanks! I got it to work with
<?php namespace custom_name\Emails\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Customer\Api\CustomerRepositoryInterface; class AddMyData implements ObserverInterface { public function execute(\Magento\Framework\Event\Observer $observer) { /** @var \Magento\Framework\App\Action\Action $controller */ $transport = $observer->getEvent()->getTransport(); $dateraw = $transport->getOrder()->getCreatedAt(); $transport['myvar'] = date("d-m-Y", strtotime($dateraw)); } }
Thank you so much!