On this weblog, we’ll discover ways to apply the transformation in Prestashop trendy e-mail templates from a module.
The Prestashop has an TransformationInterface
interface to change your template’s design simply. Listed below are the interface particulars:
<?php namespace PrestaShopPrestaShopCoreMailTemplateTransformation; interface TransformationInterface { /** * @param string $templateContent * @param array $templateVariables * * @return string */ public operate apply($templateContent, array $templateVariables); /** * Returns the kind of templates both html or textual content * * @return string */ public operate getType(); /** * @param LanguageInterface $language * * @return object */ public operate setLanguage(LanguageInterface $language); }
Go to the GitHub hyperlink https://github.com/PrestaShop/PrestaShop/blob/8.0.0/src/Core/MailTemplate/Transformation/TransformationInterface.php to get extra details about this interface.
The apply methodology receives the rendered structure as a string to carry out alternative and DOM manipulation.
In the event you don’t wish to modify it merely return the string with none adjustments. The getType methodology is used to filter transformations and the setLanguage methodology will can help you know concerning the language utilized in e-mail era to establish localized content material.
Prestashop Firm ? Learn Extra
Within the following instance, we’re utilizing a contemporary customized structure. If you wish to create a brand new structure then observe our different weblog.
{# modules/demoemail/mails/structure/customizable_modern_layout.html.twig #} {% extends '@MailThemes/trendy/elements/structure.html.twig' %} {% block content material %} <desk width="100%"> <tr> <td align="middle" class="titleblock"> <font dimension="2" face="{{ languageDefaultFont }}Open-sans, sans-serif" coloration="#555454"> <span class="title">{{ 'That is an instance mail template from my module for contemporary theme'|trans({}, 'EmailsBody', locale)|uncooked }}</span> </font> </td> </tr> <tr> <td align="middle" class="titleblock"> <font dimension="2" face="{{ languageDefaultFont }}Open-sans, sans-serif" coloration="#555454"> <span class="customTitle">{{ exampleMsg }}</span> </font> </td> </tr> <tr> <td class="space_footer"> </td> </tr> </desk> {% endblock %}
Within the above code the <<robust><em>span class="customTitle"></em></robust> that comprises the message, we'll use this as a CSS selector to use our transformation.
Within the under code, we’ll create a category ExampleMsgColorTransformation that may prolong AbstractTransformation summary class. The AbstractTransformation class implements the TransformationInterface. The target of this class is to vary the colour of all of the <span>
tags with the customTitle
class.
<?php namespace PrestaShopModuleDemoemailMailTemplateTransformation; use PrestaShopPrestaShopCoreExceptionInvalidArgumentException; use PrestaShopPrestaShopCoreMailTemplateMailTemplateInterface; use PrestaShopPrestaShopCoreMailTemplateTransformationAbstractTransformation; use SymfonyComponentDomCrawlerCrawler; use DOMElement; /** * Class ExampleMsgColorTransformation provides the customized coloration to all spans * with class subtitle. */ class ExampleMsgColorTransformation extends AbstractTransformation { /** @var string */ personal $customColor; /** * @param string $customColor * @throws InvalidArgumentException */ public operate __construct($customColor) { mum or dad::__construct(MailTemplateInterface::HTML_TYPE); $this->customColor = $customColor; } /** * @inheritDoc */ public operate apply($templateContent, array $templateVariables) { $crawler = new Crawler($templateContent); $customSpans = $crawler->filter('span[class="subtitle"]'); /** @var DOMElement $customSpan */ foreach ($customSpans as $customSpan) { $customSpan->setAttribute('model', sprintf('coloration: %s;', $this->customColor)); } return $crawler->html(); } }
Now add your transformation for this structure, you could use the actionGetMailLayoutTransformations
hook to render this from the module.
<?php use PrestaShopPrestaShopCoreMailTemplateMailTemplateInterface; use PrestaShopPrestaShopCoreMailTemplateMailTemplateRendererInterface; use PrestaShopPrestaShopCoreMailTemplateLayoutLayoutInterface; use PrestaShopPrestaShopCoreMailTemplateTransformationTransformationCollectionInterface; use PrestaShopModuleDemoemailMailTemplateTransformationExampleMsgColorTransformation; class Demoemail extends Module { public operate set up() { return mum or dad::set up() && $this->registerHook(MailTemplateRendererInterface::GET_MAIL_LAYOUT_TRANSFORMATIONS) ; } public operate uninstall() { return mum or dad::uninstall() && $this->unregisterHook(MailTemplateRendererInterface::GET_MAIL_LAYOUT_TRANSFORMATIONS) ; } public operate allow() { return mum or dad::allow() && $this->registerHook(MailTemplateRendererInterface::GET_MAIL_LAYOUT_TRANSFORMATIONS) ; } public operate disable() { return mum or dad::disable() && $this->unregisterHook(MailTemplateRendererInterface::GET_MAIL_LAYOUT_TRANSFORMATIONS) ; } /** * @param array $hookParams */ public operate hookActionGetMailLayoutTransformations(array $hookParams) { if (!isset($hookParams['templateType']) || MailTemplateInterface::HTML_TYPE !== $hookParams['templateType'] || !isset($hookParams['mailLayout']) || !isset($hookParams['layoutTransformations'])) { return; } /** @var LayoutInterface $mailLayout */ $mailLayout = $hookParams['mailLayout']; if ($mailLayout->getModuleName() != $this->identify) { return; } /** @var TransformationCollectionInterface $transformations */ $transformations = $hookParams['layoutTransformations']; $transformations->add(new ExampleMsgColorTransformation('#FF0000')); } }
Now go to the “Design > E mail Theme” web page and preview your structure you will notice that your message has now modified its coloration.
That’s all about this weblog.
If any subject or doubt please be at liberty to say it within the remark part.
I’d be completely satisfied to assist.
Additionally, you possibly can discover our PrestaShop Improvement Companies & a wide range of high quality PrestaShop Modules.
For any doubt contact us at [email protected]