Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extends email token documentation in emails.rst #194

Open
wants to merge 7 commits into
base: 5.x
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 67 additions & 7 deletions docs/components/emails.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,85 @@
- Email transport/Email providers
- Email stat helpers

Email tokens and A/B testing
----------------------------
.. Note:: Extending generally works by hooking into events using event listeners or subscribers. Read more about :doc:`listeners and subscribers</plugins/event_listeners>`.

Check failure on line 12 in docs/components/emails.rst

View workflow job for this annotation

GitHub Actions / prose

[vale] reported by reviewdog 🐶 [Vale.Terms] Use 'Plugins' instead of 'plugins'. Raw Output: {"message": "[Vale.Terms] Use 'Plugins' instead of 'plugins'.", "location": {"path": "docs/components/emails.rst", "range": {"start": {"line": 12, "column": 147}}}, "severity": "ERROR"}

Check warning on line 12 in docs/components/emails.rst

View workflow job for this annotation

GitHub Actions / prose

[vale] reported by reviewdog 🐶 [Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Plugins' instead of 'plugins'. Raw Output: {"message": "[Mautic.FeatureList] Is this referring to a Mautic feature? If so, use 'Plugins' instead of 'plugins'.", "location": {"path": "docs/components/emails.rst", "range": {"start": {"line": 12, "column": 147}}}, "severity": "INFO"}

Email tokens
------------
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
------------
************

Please use the correct headings:

H1 ###
H2 ***
H3 ===
H4 ---
H5 ~~~

This is a H2 so it should be *** not ---


Email tokens are placeholders that you can insert into an Email.
They get replaced by Dynamic Content once the Email gets sent or viewed in the browser.

You can find examples of both Email token handling and A/B testing in the code example below.
Both leverage the ``\Mautic\EmailBundle\EmailEvents::EMAIL_ON_BUILD`` event. Read more about :doc:`listeners and subscribers</plugins/event_listeners>`.

Email token capabilities consist of two parts: registering your custom tokens and rendering them.

- ``$event->addToken($uniqueId, $htmlContent)`` allows you to show the Email token in the email builder, so that users can easily add the token to their emails.
- ``$event->getContent()`` and ``$event->setContent()`` are used for replacing the Email token with actual Dynamic Content once the Email gets send or viewed in the browser.
Registering custom tokens in builders
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See earlier comment about headings. This should be a H3 if you want it to be nested under the H2 above.


Registering tokens leverages the ``\Mautic\EmailBundle\EmailEvents::EMAIL_ON_BUILD`` event.
The event is dispatched before displaying the email builder form, to allow adding of tokens.

An event listener receives the ``Mautic\EmailBundle\Event\EmailBuilderEvent``.
Use its ``$event->addToken($token, $htmlContent)`` to add your token.

.. Note::
You can either hard code your tokens textual description in ``$htmlContent`` or use a translatable string.

Rendering custom tokens
~~~~~~~~~~~~~~~~~~~~~~~
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See above about headings.


Registering tokens leverage the
- ``\Mautic\EmailBundle\EmailEvents::EMAIL_ON_SEND`` event when the email is sent or the
- ``\Mautic\EmailBundle\EmailEvents::EMAIL_ON_DISPLAY`` event when the email is rendered for viewing in a browser, i.e., after the Lead clicked the ``{webview_url}`` link.

An event listener receives in both cases the ``Mautic\EmailBundle\Event\EmailSendEvent``.
You can replace a custom token using the events ``$event->addToken($token, $contentToReplaceToken)``.


Basic Token Replacement

Check warning on line 45 in docs/components/emails.rst

View workflow job for this annotation

GitHub Actions / prose

[vale] reported by reviewdog 🐶 [Google.Headings] 'Basic Token Replacement' should use sentence-style capitalization. Raw Output: {"message": "[Google.Headings] 'Basic Token Replacement' should use sentence-style capitalization.", "location": {"path": "docs/components/emails.rst", "range": {"start": {"line": 45, "column": 1}}}, "severity": "WARNING"}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Basic Token Replacement
Basic token replacement

Please don't use camel case - we use sentence case in headings.

^^^^^^^
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heading also needs fixing here please.


.. code-block:: PHP

<?php

// plugins/HelloWorldBundle/EventListener/EmailSubscriber.php
class EmailSubscriber implements EventSubscriberInterface
{

public static function getSubscribedEvents(): array
{
return [
EmailEvents::EMAIL_ON_BUILD => ['onEmailBuild', 0],
EmailEvents::EMAIL_ON_SEND => ['onEmailGenerate', 0],
EmailEvents::EMAIL_ON_DISPLAY => ['onEmailGenerate', 0],
];
}

public function onEmailBuild(EmailBuilderEvent $event): void
{
$event->addToken('{my_custom_token}', 'My Custom Token');
}

public function onEmailGenerate(EmailSendEvent $event): void
{
$event->addToken('{my_custom_token}', 'Hello <b>World!</b>');
}
}

.. Note::
If you need more complex replacing you can use the event's ``$event->getContent()`` and ``$event->setContent()`` methods. See the example in the following section.


Email A/B testing

Check warning on line 80 in docs/components/emails.rst

View workflow job for this annotation

GitHub Actions / prose

[vale] reported by reviewdog 🐶 [Google.Headings] 'Email A/B testing' should use sentence-style capitalization. Raw Output: {"message": "[Google.Headings] 'Email A/B testing' should use sentence-style capitalization.", "location": {"path": "docs/components/emails.rst", "range": {"start": {"line": 80, "column": 1}}}, "severity": "WARNING"}
-----------------
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heading nesting needs fixing here too, I think perhaps it should be an H2 heading?


While Mautic supports :xref:`A/B testing` out of the box, you might have more complex needs to determine A/B test winner criteria.

- ``$event->addAbTestWinnerCriteria()`` allows you to do exactly that. Using your custom logic, you can decide the winner of such criteria. An example is shown below.
- ``$event->setAbTestResults()`` is where you set the actual A/B test results. More details are in the code example below.

A/B Testing Example
^^^^^^^
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heading nesting needs fixing, and it must reach the end of the text for the heading.


.. code-block:: PHP

<?php
Expand Down
Loading