Warning: You are browsing the documentation for PrestaShop 1.7, which is outdated.
You might want to read an updated version of this page for the current version, PrestaShop 8. Read the updated version of this page
Now, what if you want to add a whole new email theme? Of course one possibility is to add a new theme folder in mails/themes/
but it’s not the most convenient if you want to install/uninstall it easily and quickly, so let’s integrate the theme in a module.
Just like we did to add a layout from a module we are going to use the actionListMailThemes
hook, except this time we are going to add a whole email theme. Now to ease things a bit we can use FolderThemeScanner
used by the core to scan its own themes.
<?php
use PrestaShop\PrestaShop\Core\MailTemplate\Layout\Layout;
use PrestaShop\PrestaShop\Core\MailTemplate\ThemeCatalogInterface;
use PrestaShop\PrestaShop\Core\MailTemplate\ThemeCollectionInterface;
use PrestaShop\PrestaShop\Core\MailTemplate\ThemeInterface;
use PrestaShop\PrestaShop\Core\MailTemplate\FolderThemeScanner;
class MyEmailThemeModule extends Module
{
public function install()
{
return parent::install()
// This class constant contains 'actionListMailThemes'
&& $this->registerHook(ThemeCatalogInterface::LIST_MAIL_THEMES_HOOK)
;
}
public function uninstall()
{
return parent::uninstall()
&& $this->unregisterHook(ThemeCatalogInterface::LIST_MAIL_THEMES_HOOK)
;
}
public function enable()
{
return parent::enable()
&& $this->registerHook(ThemeCatalogInterface::LIST_MAIL_THEMES_HOOK)
;
}
public function disable()
{
return parent::disable()
&& $this->unregisterHook(ThemeCatalogInterface::LIST_MAIL_THEMES_HOOK)
;
}
/**
* @param array $hookParams
*/
public function hookActionListMailThemes(array $hookParams)
{
if (!isset($hookParams['mailThemes'])) {
return;
}
/** @var ThemeCollectionInterface $themes */
$themes = $hookParams['mailThemes'];
$scanner = new FolderThemeScanner();
$darkTheme = $scanner->scan(__DIR__.'/mails/themes/dark_modern');
if (null !== $darkTheme && $darkTheme->getLayouts()->count() > 0) {
$themes->add($darkTheme);
}
}
}
You can then go to the “Design > Email Theme” page and preview the dark_modern
theme.