Skip to content

black-lamp/yii2-email-templates

Repository files navigation

Email templates module for Yii2

Module for adding templates for email letters across dashboard

Build Status Latest Stable Version Latest Unstable Version License

Installation

Run command

composer require black-lamp/yii2-email-templates

or add

"black-lamp/yii2-email-templates": "^3.0.0"

to the require section of your composer.json.

Applying migrations

yii migrate --migrationPath=@vendor/black-lamp/yii2-email-templates/src/migrations

Add module to application config

Backend module for create, edit and delete email templates

'modules' => [
     // ...
     'email-templates' => [
         'class' => bl\emailTemplates\EmailTemplates::class,
         'languageProvider' => [
            'class' => bl\emailTemplates\providers\DbLanguageProvider::class,
            'tableName' => 'language',
            'idField' => 'id',
            'nameField' => 'name'
         ]
     ],
]

languageProvider it's a class that implements LanguageProviderInterface. You can use language providers from this extension or create yours. This extension has two language providers.

Database language provider configuration properties
Option Description Type Default
tableName Name of table in database with languages string language
idField Name of field in language table with primary key string id
idName Name of field in language table with language name string name
Config language provider configuration properties
Option Description Type Default
languages Array with languages. Example [1 => 'English', 2 => 'Russian'] array -
defaultLanguage Array with default language. Array must contains one value. Example [1 => 'English'] array -

Add component to application config

Component for getting the templates from database

'components' => [
    // ...
    'emailTemplates' => [
        'class' => bl\emailTemplates\components\TemplateManager::class
    ],
]

Using

  1. Create the template with markers across dashboard

Email subject

New message from {sitename}

Email body

Hello, {username}!

Text...

Go to the link - {link}

  1. Get template by key with component help
$template = Yii::$app->templateManager->getTemplate('test', 1);

This method return a Template object.

  1. You should to parse the markers in email subject and email body
    $template->parseSubject([
        '{sitename}' => $sitename
    ]);
    
    $template->parseBody([
        '{username}' => Yii::$app->user->identity->firstname,
        '{link}' => Url::toRoute(['/confirm', 'token' => $token], true)
    ]);
  1. Now you can using this template
Yii::$app->mailer->compose()
    // ...
    ->setSubject($template->subject)
    ->setHtmlBody($template->body)
    // ...