Welcome to the Follow-Up Email documentation.
Here, you can find everything you need to set up your Follow-Up fully-featured campaigns and create a vast promotional network, motivating your customers with a rich income.
Firstly, please visit our extension in the My Downloadable Products section of our store. Learn how to install extension, and proceed with Quick Start, which will guide you through setting up your Follow-Up service.
Copy installation instructions from the page My Downloadable Products to the SSH console and press ENTER.
php -f bin/magento module:enable Mirasvit_Core Mirasvit_EmailDesigner Mirasvit_Email Mirasvit_EmailReport Mirasvit_Event
to enable the extension.php -f bin/magento setup:upgrade
to install the extension.php -f bin/magento cache:clean
for clean cache.Deploy static view files
rm -rf pub/static/*; rm -rf var/view_preprocessed/*; php -f bin/magento setup:static-content:deploy
"app/code/"
directory, you additionally need to install the required libraries through the composer:composer require "liquid/liquid":"~1.4"
composer require "geoip2/geoip2":"^2.9"
Our extension is simple yet powerful. Once you install it, you can proceed with the creation of your promotional campaigns.
Here are some tips to quickly tackle our key features:
Basic building blocks are Templates, which contain actual messages, sent in emails. Enrich them with Liquid Variables and give them a consistent look & feel with Themes.
Create Campaigns to start your promotional service. Each campaign will require at least one Trigger - an action that starts sending emails chain.
We have a nice set of examples of campaigns and triggers, which will help you master them.
Test your campaign with our built-in simple testing framework.
Analyze Mail Logs and Event Logs and adjust your promotional campaigns for maximum efficiency.
This should be a good start. Refer to the respective sections of this manual to learn more.
General Follow Up Email settings are located at Marketing -> Follow Up Email -> Settings, and consist of the following sections:
Option | Description |
---|---|
Limits the number of emails per address | Allows you to limit the maximum number of emails sent per address within the specified period. |
Send maximum emails | Sets a maximum number of emails allowed for a specified Period. |
Period (hours) | Sets the period for the maximum amount of emails which can be set at Send maximum emails. |
Send maximum emails 3
Period (hours) 24
If a customer has already received 3 emails from you within 24 hours, all other emails during the same 24 hours will be canceled
Option | Description |
---|---|
Twitter Url | Allows you to add a Twitter URL to the trigger emails. |
Facebook Url | Allows you to add a Facebook URL to the trigger emails. |
The Follow Up Email extension generates the coupon codes based on the selected shopping cart price rule. Using the settings below, you can configure an appearance of the generated coupon code.
Option | Description |
---|---|
Code Length | Length of the coupon code, excluding prefix, suffix, and separators. |
Code Prefix | Specifies common prefix used for coupon codes generated by Follow Up Email extension. |
Code Suffix | Specifies common suffix used for coupon codes generated by Follow Up Email extension. |
Dash Every X Characters | Adds dash character every X symbol to the coupon code. |
This section governs Sandbox Mode, which can be used for Campaign Testing.
Option | Description |
---|---|
Sandbox Mode | if this option is enabled, all emails will be sent only to the Test Recipient Email. |
Test Recipient Email | Sets receiving email for trigger emails if Sandbox Mode is enabled. |
Option | Description |
---|---|
Reset statistic | Clears your campaigns' data. |
Cleanup Period | Sets a number of days after which cron deletes old events and emails. The default is 365. Skips cleanup if set to 0. |
Go to Stores -> Settings -> Configuration. In the panel on the left under Mirasvit Extensions, choose Event. You will see the following settings:
Enable AJAX Data Capturing - allows you to control guest users' data capturing.
GeoLite2 Country database path - the absolute path to the GeoLite2 Country database on your server.
Make sure to copy the database file GeoLite2-Country.mmdb to the folder available for the web-server user, e.g. /magento_root_folder/var/GeoLite2-Country.mmdb
The extension allows you to manage customer emails' subscription/unsubscription.
Go to Marketing -> Follow Up Email -> Unsubscription List.
At the main grid, you can see a list of all customers who have unsubscribed from the trigger emails, where:
Click the button Subscribe to remove customer unsubscription.
It is possible to make emails mass subscription by clicking the button Subscribe at tab menu Actions
At the main grid, click the button Unsubscribe Email.
On the new page will be the following fields:
A campaign is a central point in our Follow-Up Emails extension. Each campaign is a project which consists of one or more Triggers, each with its own Audience, triggering Event and Emails Chain.
All campaigns are located at Marketing -> Follow-Up Email -> Manage Campaigns and organized in the Dashboard with statistics, quick info, and basic actions. It is shown on the screenshot below:
As you can see, the Dashboard consists of two subpanels - top and bottom.
The top is a Cross Overview - an overall statistics hub, where displayed, how all of your campaigns succeeded in general. It breaks into two rows:
The bottom contains the list of all Campaigns that are defined in your store(s). Each row on this list contains the following information:
The simplest way to create a Campaign is to use the Duplicate action, and then adjust it to your needs.
Still, in most cases, you will need a custom campaign. You can create one by pressing Create Campaign button at Marketing -> Follow-Up Email -> Manage Campaigns. It will bring you to the first stage of Campaign creation:
At this stage, you can select one of the suggested (and defined before) campaigns as a template. Pressing on one of them is identical to employing the Duplicate function - our extension will create a campaign using one of the pre-defined templates, automatically creating all necessary events and triggers.
There is also a Custom Campaign button. It starts creating a Campaign from scratch, and brings you to the empty Campaign workspace.
To operate successfully, a Campaign needs to have one or more Triggers assigned to it. You can add a Trigger by pressing the Add Trigger button. You will then see a Trigger definition dialog which contains the basic data, broken into three categories:
email
, follow-up-email
, newsletter
)cpc
, banner
, email
.GET
params to all links in the emails. This way, following them will be recorded by Google automatically without any additional adjustments.
Example: http://example.com/about-us/ will be converted to http://example.com/about-us/?utm-source=email&utm-medium=trigger-email&utm-name=review-request
.
To track the campaign performance at Google Analytics, log in to your Google account and go to Traffic Sources -> Campaigns. Select the campaign source from the list, and you will receive a report.
After the Trigger is attached to the Campaign, you need to set it up and assign audience.
A Trigger is an event or sequence of events that, as a result, generates a chain of emails.
Each campaign has at least one trigger attached to it. To edit the trigger, you need to proceed to Marketing -> Follow-Up Email -> Manage Campaigns and select a Campaign, or directly click on the corresponding button on the Trigger Pane.
Each trigger has its own sub pane on the Campaign edit page.
It has two basic parameters that are required for proper work:
Event - a certain action of a visitor (e.g., login, registration, placing an order) or action of a system (e.g., change order status, change of price).
To assign an event to Trigger, press the edit link on the Event block. You will be asked for two parameters:
Both parameters use the same Event List which can be seen here.
Sales / Order obtained Pending status
Sales / Order obtained Completed status
The audience is defined as the group of customers who are eligible to receive emails during the current campaign.
This block can be empty: in this case, all of your customers will be eligible for the campaign and email sending. However, if you wish to have different email flows for different groups of customers, you need to mark Audience.
You need to press the edit link on the Audience block to view the audience's conditions.
This rule allows you to use the following conditions to limit the campaign audience, which are grouped to categories:
If ALL/ANY products in cart/order matching these conditions
, which can contain one or more product's properties, which should trigger an email.After configuring the Event and Audience, you can add email to the chain and test the new trigger.
(DEPRECATED) Administrator Trigger
In older versions in addition to simple triggers, there were also Administrator Triggers.
The benefit of the Administrator Trigger is that you can use it to send an email to yourself when a particular event is triggered in your store, meaning that it serves just like a notifier or reminder about certain events which occurred in your store.
Here are some examples of situations when you may want to send a message to yourself:
If you still use the old version, you can create an Administrator Trigger with Add New Administrator Trigger at the Trigger edit page.
After that, you should complete one additional field in the trigger's settings:
You can create an unlimited number of emails that will be sent after event triggering.
All of them will be displayed on the Emails sub pane at the Trigger pane of the Campaign edit page:
Press Add New Email to add a new email to your Trigger, and you will see an Email adding dialog with the following properties:
Customer Logged In
Customer Logged out
New Customer Sign up
Customer Birthday
Newsletter subscription
By default, Magento sends its own Success Email Template after a new client has subscribed to a newsletter.
If you want to use our module for this type of email, you need to disable the standard Magento template.
To disable it, navigate to Stores > Settings > Configuration > Customers > Newsletter, and selected the option Disable for the Success Email Template field.
Abandoned Shopping Cart
The event is triggered when the shopping cart is not updated in the last 60 minutes.
Order obtained a new status
Order obtained '###' status
Order obtained 'Pending' status
Order obtained 'Processing' status
Order obtained 'Completed' status
Product was added to wishlist
New review was added
Our extension allows you to test your campaign without starting a real one. Just take the following steps:
In this mode, sending emails to actual customers will be suppressed. Instead, all of them will flow directly to the mailbox, set in the Test Recipient Email setting in the section above.
Our application comes with a set of handy examples, which can easily be adjusted to most cases of promotional plans. They are:
Let's delve into their details:
The Abandoned Cart campaign is meant to remind customers of their unfinished shopping and encourage them to either complete their purchase or continue shopping for new products.
Typically the campaign consists of one trigger with three emails:
Trigger: Abandoned Cart
Shopping Cart / Abandoned Shopping Cart
Sales / Order obtained Pending status
Quote: Total count of products greater than 0
Email Chain:
Abandoned Cart
2 hours
Abandoned Cart
5 days
Abandoned Cart
15 days
Engagement Campaign is the most complex of all campaigns. It consists of the most used triggers that can attract customers to your store and create a close relationship between you and your customers.
Trigger: Customer birthday
This trigger sends an email to the customer on his/her birthday. Since the corresponding event occurs at 00:00, we need an extra 10-hours delay.
Customer / Birthday
none
not set
(means all customers are eligible)Email Chain:
Happy Birthday
10 hours
Trigger: Customer coming back
This trigger is used when a customer hasn't visited the store for over a year, and therefore, should receive information about our newest picks.
Customer / Logged In
none
Customer: Last activity (in days) equals or greater than 10
Email Chain:
Customer coming back
Yes
Cross-sell products
Trigger: Review Request
This trigger watches which products a customer has bought, and automatically requests that the customer give a product review if they have not returned a product for ten days (approx. period of return).
Sales / Order obtained 'Complete' status
none
not set
Email Chain:
Review Request
10 days
Yes
Cross-sell products
Trigger: Product View Follow Up
This trigger monitors which products a customer has viewed recently and automatically suggest similar products.
Product / View
Sales / Order obtained Pending status
Recipient does not have emails with Ready to Go status in the Mail Log for the trigger(s) Anniversary within last 7 days
Product is one of 20 top selling products is Yes
Email Chain:
Recently Viewed Products
3 hours
Yes
Related products
Trigger: Welcome Trigger
This is the most basic trigger. It activates after customer registration and sends a welcome message and a list of the latest picks.
Customer / Sign Up
none
not set
Email Chain:
Welcome
Yes
Cross-sell products
Trigger: Anniversary
This trigger allows you to create anniversary event for your customer, celebrating their yearly anniversary of using your store.
Customer / Sign Up
none
not set
Email Chain:
Anniversary
365 days
This campaign consists of triggers that should help you attract customers to return, namely those who had purchased items at your site in the past, but were not convinced to stay.
Trigger: Win-back never purchased customers
This trigger monitors customers who had registered, but never created a cart or purchased a product. After 30 days, we will send them an email with our newest picks.
Customer / Sign Up
Sales / Order obtained Pending status
not set
(means all customers are eligible)Email Chain:
We miss you
30 days
Yes
Cross-sell products
We miss you 2
60 days
Yes
Related products
Trigger: Win-back old customers
This trigger is used when a customer purchased something but hasn't visited the store for two months. Therefore, they should receive a friendly reminder and information about our newest picks.
Sales / Order obtained 'Complete' status
Sales / Order obtained Pending status
not set
Email Chain:
We miss you 2
60 days
Yes
Related products
This campaign was created to suggest customers check out other products that are connected with their purchases.
Trigger: Order status changed to processing
This trigger is activated when a customer had placed an order, and it is processed. Therefore, the customer might be interested in purchasing an additional related item.
Sales / Order obtained 'Processing' status
none
not set
(means all customers are eligible)Email Chain:
Order status changed
Yes
Cross-sell products
Trigger: Complementary offer
This trigger is used when a customer has placed an order, and it was processed two days prior, presuming it's still fresh in their mind. This means that we should suggest they consider buying another complementary item from the store.
Sales / Order obtained 'Pending' status
none
not set
Email Chain:
Complementary offer: related products
5 days
Yes
Related products
Trigger: Replenishment products offer
This trigger is used when a customer purchased something, and we would like to suggest they consider buying related accessories or replaceable components (batteries, for example).
Sales / Order obtained 'Complete' status
none
not set
Email Chain:
Replenishment products
30 days
Yes
Upsell products
Themes are the most generic templates that allow you to have all general elements of your email design (such as headers, styles, and footers) in one place. When designing a template, you can just select a theme and specify the message - the rest will be done by our extension.
To create a new theme, visit Marketing -> Follow Up Email -> Email Designer -> Manage Themes and press the Add Theme button.
The theme consists of the following properties:
The Template covers all email areas - including headers, footers and even the main content. These editable areas are defined using special liquid variables:
{{ 'header' | area: 'Email header here...' }}
- places a header area{{ 'content' | area: 'Email text here...' }}
- places a main body area{{ 'footer' | area: 'Email footer here...' }}
- places a footer area{% if 'content' | area %}
{{ 'content' | area: 'Email text here...' }}
{% endif %}
If you prefer to use callout-style, use the <?php echo $this->area('header') ?>
directive instead.
You can also use Variables and Callouts in your design.
All these parts can be previewed on the Preview Pane in both Desktop and Mobile versions.
Save the theme and proceed with Templates creation.
All templates used in Follow-Up Emails are located at their respective Grid at Marketing -> Email Designer -> Manage Templates.
Actions performed on templates can be selected from the Actions drop-down. Here you can Edit or Remove Template.
Go to Marketing -> Email Designed -> Manage Templates, and press the Add Template button. It will bring you to the first stage of Template creation, with the following basic properties:
Saving a template at this stage does not actually create a template, but a draft stub. After it is saved, you need to reopen it using the Edit action, and enter contents.
The Template Edit Page breaks into two panels - left (Areas Pane) and right (Preview Pane).
Areas are parts of your email. They depend on your store's design, and your desired look & feel, but should consist of three areas:
You can use Variables in any part of template. The Insert Variables button will help you to pick up the desired variable interactively.
All of these parts can be previewed on the Preview Pane in both Desktop and Mobile versions.
{% for item in this.all_visible_items %}
---
{% endfor %}
To send only the first active product in an email, you need to modify this pattern:
{% for item in this.first_visible_item %}
---
{% endfor %}
Our extension allows you to use variables and PHP callouts in your emails, which can greatly enhance and personalize them.
Both variables and callouts can be used simultaneously, and are fully interchangeable so you can select your preferred syntax, and use it for all of your customizations.
Liquid is the preferred syntax for use with Email Templates. It allows you to avoid errors with the absence of attributes or values. Moreover, we provide a convenient helper dialog for inserting liquid variables into the editor.
Callouts are deprecated syntax, and used mainly for backward compatibility with older Follow-Up Email versions.
Liquid variables are a new way to enhance email templates. This syntax was introduced in version 1.1.15 and is the preferred syntax for use in Email Templates.
All variables should be enclosed in curly brackets. Each variable can also have a filter, added after pipe sign, and have one or more parameters.
{{ attribute | filter }}
{{ entity.attribute | filter | filter: param1 }}
{{ entity.entity.attribute | filter: param1,param2 }}
These variables can be added interactively from edit pages of Theme or Template.
You just need to press the button Insert Variable near the content element, and select the variable you want to use - as shown below:
Filters are methods that allow you to alter or enhance the output of a variable. They also should be enclosed to the variable block {{
}}
, but separated from the variable with a pipe (|
) character. The parameters of filters are added using the colon (:
) character.
{{ item.product.name | truncate: '150' }}
- truncates the name of the product to 150 characters/{{ item.product.weight | round: '2' }} kg
- rounds the weight of the product to 2 decimal digits
Here is the list of available filters, grouped into categories, with examples:
String/HTML Filters
downcase
- converts a string into lowercase.
{{ item.product.name | downcase }}
Dash Digital Watch
dash digital watch
upcase
- converts a string into uppercase.
{{ item.product.name | upcase }}
Dash Digital Watch
DASH DIGITAL WATCH
replace
- replaces all occurrences of a string with a substring.
{{ item.product.name | replace: 'Digital', 'Analog' }}
Dash Digital Watch
Dash Analog watch
append
- appends characters to a string.
{{ item.product.name | append: ' - best choice' }}
Dash Digital Watch
Dash Digital Watch - best choice
prepend
- prepends characters to a string.
{{ item.product.name | prepend: 'Best choice - ' }}
Dash Digital Watch
Best choice - Dash Digital Watch
capitalize
- capitalizes words in the input sentence.
{{ item.product.color | capitalize }}
dark red
Dark red
escape
- escapes HTML tags in a string.
{{ item.product.description | escape }
newline_to_br
- inserts a <br>
linebreak HTML tag in front of each line break in a string.
{{ item.product.short_description | newline_to_br }
remove
- removes all occurrences of a substring from a string.
{{ item.product.name | remove: 'Digital' }}
Dash Digital Watch
Dash Watch
strip_html
- strips all HTML tags from a string.
{{ item.product.description | strip_html }
truncate
- truncates a string down to 'x' characters.
{{ item.product.name | truncate: '15' }}
Dash Digital Watch
ash Digital Wa
if_empty
- return argument, if the value is an empty string
Dear {{ customer_name | if_empty: 'Client' }}!
empty string
Dear Client!
date
- converts a string to a specified date-time format.
{{ item.product.created_at | date: '%d.%m.%Y %H:%M' }}
2016-02-18 10:11:12
18.02.2016 10:11
Full list of formatters can be found here
format_date
- converts a string to a specified date-time format.
{{ item.product.created_at | format_date: 3 }}
2016-02-18 10:11:12
18/02/16
Possible formatters: 0, 1 , 2 , 3
Numeric Filters
ceil
- rounds the output up to the nearest integer.
{{ item.product.weight | ceil }}
1.423
2
floor
- rounds the output down to the nearest integer.
{{ item.product.weight | floor }}
1.423
1
round
- rounds the output to the nearest integer or specified decimal digits.
{{ item.product.weight | round: '2' }}
1.423
1.42
{{ item.product.weight | round }}
1.423
1
number_format
- formats number to specified format (php function).
{{ item.product.price | number_format: '2', '.', ',' }}
Price/Currency Filters
format_price
- formats price to default format.
{{ item.product.price | format_price }}
100.42
$100.42
convert
- converts a price from base currency to specified currency.
{{ item.product.price | convert: 'EUR' }}
100
92.28
Array Filters
first
- return first element in array.
last
- return last element in array.
join
- join array to string using glue.
size
- return the size of an array or a string.URL Filters
resume
- resume customer's session and redirect it to base URL
{{ item.product.product_url | resume }}
Image Filters
resize
- resize image
{{ item.product.image | resize: 'small_image', 100, 100 }}
http://example.com/pub/media/catalog/product/m/h/mh03-black_main.jpg
http://example.com/pub/media/cache/100x100/catalog/product/m/h/mh03-black_main.jpg
PHP Callouts is a very powerful tool to enhance your templates. It allows you to include PHP code directly to the HTML Code.
Here is the list of possible callouts with respective examples:
Global Methods
getUnsubscribeUrl
- a direct link to unsubscribe from current trigger.
The customer will be unsubscribed from all already scheduled emails (Follow Up Email -> Mail Log (Queue)) for the current trigger.
This link does not unsubscribe customers from future emails (triggered by other events) or native Magento subscription.
Usage: <a href="<?php echo $this->getUnsubscribeUrl() ?>">Unsubscribe</a>
getUnsubscribeAllUrl
- a direct link to unsubscribe from all triggers
The customer will be unsubscribed from all already scheduled emails (Follow Up Email -> Mail Log (Queue)) for all triggers.
This link does not unsubscribe customers from native Magento subscription.
Usage: <a href="<?php echo $this->getUnsubscribeAllUrl() ?>">Unsubscribe</a>
getViewInBrowserUrl
- a direct link to open email in browser
Usage: <a href="<?php echo $this->getViewInBrowserUrl() ?>">View it in your browser.</a>
getResumeUrl
- a direct link to resume (restore, log in) customer session
Usage: <a href="<?php echo $this->getResumeUrl() ?>">Open</a>
i.e., the customer will be automatically authorized in the store.
Additionally, you can pass a parameter to the method to redirect the customer to a specific URL after authorization.
<?php foreach($this->getOrder()->getAllVisibleItems() as $item): ?>
<tr>
<td>
<a href="<?php echo $this->getResumeUrl($item->getProduct()->getProductUrl()) ?>">Review <?php echo $item->getName() ?></a>
</td>
</tr>
<?php endforeach ?>
i.e., the customer will be redirected to the product page to leave a review after automatic authorization.
getStoreUrl
- a direct link to the store home page
Usage: <?php echo $this->getStoreUrl() ?>
getStoreName
- a curent store name
Usage: <?php echo $this->getStoreName() ?>
getStorePhone
- a curent store phone
Usage: <?php echo $this->getStorePhone() ?>
getStoreAddress
- a curent store address
Usage: <?php echo $this->getStoreAddress() ?>
getStoreEmail
- a curent store general transactional email
Usage: <?php echo $this->getStoreEmail() ?>
Customer Methods
getCustomerName
- returns customer's full name
Usage: Dear <?php echo $this->getCustomerName() ?>
You can pass a parameter to the method getCustomerName() which will be used instead of the customer name, if the customer's name is empty: Dear <?php echo $this->getCustomerName(null, 'Customer') ?>
, results in Dear Customer, if customer's name is empty (since version 1.0.34).
getFirstname
- returns customer's firstname (since version 1.0.36)
Usage: Dear <?php echo $this->getFirstname() ?>
getLastname
- returns customer's lastname (since version 1.0.36)
Usage: Dear <?php echo $this->getLastname() ?>
getCustomer
- retrurns customer's object (only for registered customers)
Usage: Hi <?php echo $this->getCustomer()->getFirstname() ?>
<?php echo $this->getCustomer()->getEmail() ?>
Shopping Cart Methods
getRestoreCartUrl
- a direct link to customer shopping cart
Usage: <a href="<?php echo $this->getRestoreCartUrl() ?>">Finish Checkout!</a>
getReorderCartUrl
- redirects the customer to the quote with the products purchased from the previous order
Usage: <a href="<?php echo $this->getReorderCartUrl() ?>">Reorder</a>
getQuote()->getAllVisibleItems()
- return collection of products in cart for feature output
Usage:
<?php foreach ($this->getQuote()->getAllVisibleItems() as $item): ?>
<?php echo $item->getName() ?>
<?php endforeach ?>
How to display only the first product:
<?php $i = 0 ?>
<?php foreach ($this->getQuote()->getAllVisibleItems() as $item): ?>
<?php if ($i++ >= 1): ?>
<?php break ?>
<?php endif ?>
...
other methods
...
<?php endforeach ?>
Order Methods
getOrder()->getStatus()
- the status of order
Usage: order status is <?php echo $this->getOrder()->getStatus() ?>
getOrder()->getIncrementId()
- the order number
Usage: Order #<?php echo $this->getOrder()->getIncrementId() ?>
getOrder()->getStoreGroupName()
- the store name of order
Usage: You placed order in <?php echo $this->getOrder()->getStoreGroupName() ?>
getOrder()->getAllVisibleItems()
- return list of products in order for feature output
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php echo $item->getName() ?>
<?php endforeach ?>
How to display only the first product:
<?php $i = 0 ?>
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php if ($i++ >= 1): ?>
<?php break ?>
<?php endif ?>
...
other methods
...
<?php endforeach ?>
Additional Methods
Usage:
<?php echo $this->getOrder()->getBaseTaxAmount() ?>
<?php echo $this->getOrder()->getBaseGrandTotal() ?>
<?php echo $this->getOrder()->getBaseShippingAmount() ?>
<?php echo $this->getOrder()->getShippingDescription() ?> - returns shipping method name
Coupons
getCoupon()->getCode()
- get the expiration date of an autogenerated coupon code
Usage: Expiration date: <?php echo $this->formatDate($this->getCoupon()->getExpirationDate()) ?>
Different date formats:
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate()) ?>
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::MEDIUM) ?>
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::LONG) ?>
<?php if ($this->getCoupon()): ?>
Let us offer you a discount to complete your purchase.<br>
Your coupon code: <?php echo $this->getCoupon()->getCode() ?> valid till <?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::MEDIUM) ?>
<?php endif ?>
i.e., we only display this text block if a coupon is available.
getCoupon()->getExpirationDate()
- the autogenerated coupon code
Usage: Your coupon code: <?php echo $this->getCoupon()->getCode() ?>
<?php if ($this->getCoupon()): ?>
Let us offer you a discount to complete your purchase.<br>
Your coupon code: <?php echo $this->getCoupon()->getCode() ?>
<?php endif ?>
i.e., we only display this text block if a coupon is available.
Cross-sell products
getCrossSellHtml
- html block of cross sell products
Usage: <?php echo getCrossSellHtml() ?>
<?php if ($this->getCrossSellHtml()): ?>
<h1>See also:</h1>
<?php echo $this->getCrossSellHtml() ?>
<?php endif ?>
i.e., we only display this text block if products are available.
Products Methods
getProductUrl
- a direct link to the product
Usage: <?php echo $item->getProduct()->getProductUrl() ?>
getPrice
- a price of the product
Usage: <?php echo $item->getProduct()->getPrice() ?>
<?php echo $this->formatPrice($item->getProduct()->getPrice()) ?>
getPriceInclTax
- a price of the product with tax (saved in order/shopping cart)
Usage: <?php echo $item->getPriceInclTax() ?>
<?= $this->formatPrice($item->getPriceInclTax()) ?>
getName
- a name of the product
Usage: <a href="<?php echo $item->getProduct()->getProductUrl() ?>"><?php echo $item->getName() ?></a>
Image Directive
Usage:
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'image', 100) ?>"/>
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'small_image', 150) ?>"/>
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'thumbnail) ?>"/>
Wishlist Methods
getWishlist()->getItemCollection()
- return collection of products in wishlist for feature output
Usage:
<?php foreach ($this->getWishlist()->getItemCollection() as $item): ?>
<img src="<?=$this->getImageUrl($item->getProduct(), 'image', 300) ?>"/>
<a href="<?= $item->getProduct()->getProductUrl() ?>"><?php echo $item->getProduct()->getName() ?></a>
<?php endforeach ?>
Alternative way of retrieving wishlist products:
<?php foreach ($this->getWishlistItemCollection() as $item): ?>
<img src="<?=$this->getImageUrl($item->getProduct(), 'image', 300) ?>"/>
<a href="<?php echo $item->getProduct()->getProductUrl() ?>"><?php echo $item->getProduct()->getName() ?></a>
<?php endforeach ?>
getWishlistProduct()
- return last added product to wishlist for feature output
Usage:
<a href="<?php echo $this->getWishlistProduct()->getProductUrl() ?>"><?php echo $this->getWishlistProduct()->getName() ?></a>
Price: <?php echo $this->getWishlistProduct()->getPrice() ?>
Helper Methods
Print all properties for order object:
Usage:
<?php
echo '<pre>';
print_r($this->getOrder()->debug());
echo ' </pre>';
die();
?>
Print all properties for order item object:
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php
echo '<pre>';
print_r($item->debug());
echo ' </pre>';
die();
?>
<?php endforeach ?>
Print all properties for product object:
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php
echo '<pre>';
print_r($item->getProduct()->debug());
echo ' </pre>';
die();
?>
<?php endforeach ?>
Print all properties for customer object:
Usage:
<?php
echo '<pre>';
print_r($this->getCustomer()->debug());
echo ' </pre>';
die();
?>
Print all properties for wishlist object:
Usage:
<?php
echo '<pre>';
print_r($this->getWishlist()->debug());
echo ' </pre>';
die();
?>
[property_code] => property value
[another_property_code] => property value
[one_more_property_code] => property value
Each property can be accessed separately as follows:
<?php echo $this->getOrder()->getPropertyCode() ?>
<?php echo $this->getOrder()->getAnotherPropertyCode() ?>
<?php echo $this->getOrder()->getShippingAddress()->getAnotherPropertyCode() ?>
<?php echo $this->getOrder()->getPayment()->getPropertyCode() ?>
<?php echo $this->getCustomer()->getPropertyCode() ?>
<?php echo $this->getWishlist()->getOneMorePropertyCode() ?>
<?php echo $item->getProduct()->getPropertyCode() ?>
Our extension allows you to use variables and PHP callouts in your emails, which can greatly enhance and personalize them.
Both variables and callouts can be used simultaneously, and are fully interchangeable so you can select your preferred syntax, and use it for all of your customizations.
Liquid is the preferred syntax for use with Email Templates. It allows you to avoid errors with the absence of attributes or values. Moreover, we provide a convenient helper dialog for inserting liquid variables into the editor.
Callouts are deprecated syntax, and used mainly for backward compatibility with older Follow-Up Email versions.
Liquid variables are a new way to enhance email templates. This syntax was introduced in version 1.1.15 and is the preferred syntax for use in Email Templates.
All variables should be enclosed in curly brackets. Each variable can also have a filter, added after pipe sign, and have one or more parameters.
{{ attribute | filter }}
{{ entity.attribute | filter | filter: param1 }}
{{ entity.entity.attribute | filter: param1,param2 }}
These variables can be added interactively from edit pages of Theme or Template.
You just need to press the button Insert Variable near the content element, and select the variable you want to use - as shown below:
Filters are methods that allow you to alter or enhance the output of a variable. They also should be enclosed to the variable block {{
}}
, but separated from the variable with a pipe (|
) character. The parameters of filters are added using the colon (:
) character.
{{ item.product.name | truncate: '150' }}
- truncates the name of the product to 150 characters/{{ item.product.weight | round: '2' }} kg
- rounds the weight of the product to 2 decimal digits
Here is the list of available filters, grouped into categories, with examples:
String/HTML Filters
downcase
- converts a string into lowercase.
{{ item.product.name | downcase }}
Dash Digital Watch
dash digital watch
upcase
- converts a string into uppercase.
{{ item.product.name | upcase }}
Dash Digital Watch
DASH DIGITAL WATCH
replace
- replaces all occurrences of a string with a substring.
{{ item.product.name | replace: 'Digital', 'Analog' }}
Dash Digital Watch
Dash Analog watch
append
- appends characters to a string.
{{ item.product.name | append: ' - best choice' }}
Dash Digital Watch
Dash Digital Watch - best choice
prepend
- prepends characters to a string.
{{ item.product.name | prepend: 'Best choice - ' }}
Dash Digital Watch
Best choice - Dash Digital Watch
capitalize
- capitalizes words in the input sentence.
{{ item.product.color | capitalize }}
dark red
Dark red
escape
- escapes HTML tags in a string.
{{ item.product.description | escape }
newline_to_br
- inserts a <br>
linebreak HTML tag in front of each line break in a string.
{{ item.product.short_description | newline_to_br }
remove
- removes all occurrences of a substring from a string.
{{ item.product.name | remove: 'Digital' }}
Dash Digital Watch
Dash Watch
strip_html
- strips all HTML tags from a string.
{{ item.product.description | strip_html }
truncate
- truncates a string down to 'x' characters.
{{ item.product.name | truncate: '15' }}
Dash Digital Watch
ash Digital Wa
if_empty
- return argument, if the value is an empty string
Dear {{ customer_name | if_empty: 'Client' }}!
empty string
Dear Client!
date
- converts a string to a specified date-time format.
{{ item.product.created_at | date: '%d.%m.%Y %H:%M' }}
2016-02-18 10:11:12
18.02.2016 10:11
Full list of formatters can be found here
format_date
- converts a string to a specified date-time format.
{{ item.product.created_at | format_date: 3 }}
2016-02-18 10:11:12
18/02/16
Possible formatters: 0, 1 , 2 , 3
Numeric Filters
ceil
- rounds the output up to the nearest integer.
{{ item.product.weight | ceil }}
1.423
2
floor
- rounds the output down to the nearest integer.
{{ item.product.weight | floor }}
1.423
1
round
- rounds the output to the nearest integer or specified decimal digits.
{{ item.product.weight | round: '2' }}
1.423
1.42
{{ item.product.weight | round }}
1.423
1
number_format
- formats number to specified format (php function).
{{ item.product.price | number_format: '2', '.', ',' }}
Price/Currency Filters
format_price
- formats price to default format.
{{ item.product.price | format_price }}
100.42
$100.42
convert
- converts a price from base currency to specified currency.
{{ item.product.price | convert: 'EUR' }}
100
92.28
Array Filters
first
- return first element in array.
last
- return last element in array.
join
- join array to string using glue.
size
- return the size of an array or a string.URL Filters
resume
- resume customer's session and redirect it to base URL
{{ item.product.product_url | resume }}
Image Filters
resize
- resize image
{{ item.product.image | resize: 'small_image', 100, 100 }}
http://example.com/pub/media/catalog/product/m/h/mh03-black_main.jpg
http://example.com/pub/media/cache/100x100/catalog/product/m/h/mh03-black_main.jpg
PHP Callouts is a very powerful tool to enhance your templates. It allows you to include PHP code directly to the HTML Code.
Here is the list of possible callouts with respective examples:
Global Methods
getUnsubscribeUrl
- a direct link to unsubscribe from current trigger.
The customer will be unsubscribed from all already scheduled emails (Follow Up Email -> Mail Log (Queue)) for the current trigger.
This link does not unsubscribe customers from future emails (triggered by other events) or native Magento subscription.
Usage: <a href="<?php echo $this->getUnsubscribeUrl() ?>">Unsubscribe</a>
getUnsubscribeAllUrl
- a direct link to unsubscribe from all triggers
The customer will be unsubscribed from all already scheduled emails (Follow Up Email -> Mail Log (Queue)) for all triggers.
This link does not unsubscribe customers from native Magento subscription.
Usage: <a href="<?php echo $this->getUnsubscribeAllUrl() ?>">Unsubscribe</a>
getViewInBrowserUrl
- a direct link to open email in browser
Usage: <a href="<?php echo $this->getViewInBrowserUrl() ?>">View it in your browser.</a>
getResumeUrl
- a direct link to resume (restore, log in) customer session
Usage: <a href="<?php echo $this->getResumeUrl() ?>">Open</a>
i.e., the customer will be automatically authorized in the store.
Additionally, you can pass a parameter to the method to redirect the customer to a specific URL after authorization.
<?php foreach($this->getOrder()->getAllVisibleItems() as $item): ?>
<tr>
<td>
<a href="<?php echo $this->getResumeUrl($item->getProduct()->getProductUrl()) ?>">Review <?php echo $item->getName() ?></a>
</td>
</tr>
<?php endforeach ?>
i.e., the customer will be redirected to the product page to leave a review after automatic authorization.
getStoreUrl
- a direct link to the store home page
Usage: <?php echo $this->getStoreUrl() ?>
getStoreName
- a curent store name
Usage: <?php echo $this->getStoreName() ?>
getStorePhone
- a curent store phone
Usage: <?php echo $this->getStorePhone() ?>
getStoreAddress
- a curent store address
Usage: <?php echo $this->getStoreAddress() ?>
getStoreEmail
- a curent store general transactional email
Usage: <?php echo $this->getStoreEmail() ?>
Customer Methods
getCustomerName
- returns customer's full name
Usage: Dear <?php echo $this->getCustomerName() ?>
You can pass a parameter to the method getCustomerName() which will be used instead of the customer name, if the customer's name is empty: Dear <?php echo $this->getCustomerName(null, 'Customer') ?>
, results in Dear Customer, if customer's name is empty (since version 1.0.34).
getFirstname
- returns customer's firstname (since version 1.0.36)
Usage: Dear <?php echo $this->getFirstname() ?>
getLastname
- returns customer's lastname (since version 1.0.36)
Usage: Dear <?php echo $this->getLastname() ?>
getCustomer
- retrurns customer's object (only for registered customers)
Usage: Hi <?php echo $this->getCustomer()->getFirstname() ?>
<?php echo $this->getCustomer()->getEmail() ?>
Shopping Cart Methods
getRestoreCartUrl
- a direct link to customer shopping cart
Usage: <a href="<?php echo $this->getRestoreCartUrl() ?>">Finish Checkout!</a>
getReorderCartUrl
- redirects the customer to the quote with the products purchased from the previous order
Usage: <a href="<?php echo $this->getReorderCartUrl() ?>">Reorder</a>
getQuote()->getAllVisibleItems()
- return collection of products in cart for feature output
Usage:
<?php foreach ($this->getQuote()->getAllVisibleItems() as $item): ?>
<?php echo $item->getName() ?>
<?php endforeach ?>
How to display only the first product:
<?php $i = 0 ?>
<?php foreach ($this->getQuote()->getAllVisibleItems() as $item): ?>
<?php if ($i++ >= 1): ?>
<?php break ?>
<?php endif ?>
...
other methods
...
<?php endforeach ?>
Order Methods
getOrder()->getStatus()
- the status of order
Usage: order status is <?php echo $this->getOrder()->getStatus() ?>
getOrder()->getIncrementId()
- the order number
Usage: Order #<?php echo $this->getOrder()->getIncrementId() ?>
getOrder()->getStoreGroupName()
- the store name of order
Usage: You placed order in <?php echo $this->getOrder()->getStoreGroupName() ?>
getOrder()->getAllVisibleItems()
- return list of products in order for feature output
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php echo $item->getName() ?>
<?php endforeach ?>
How to display only the first product:
<?php $i = 0 ?>
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php if ($i++ >= 1): ?>
<?php break ?>
<?php endif ?>
...
other methods
...
<?php endforeach ?>
Additional Methods
Usage:
<?php echo $this->getOrder()->getBaseTaxAmount() ?>
<?php echo $this->getOrder()->getBaseGrandTotal() ?>
<?php echo $this->getOrder()->getBaseShippingAmount() ?>
<?php echo $this->getOrder()->getShippingDescription() ?> - returns shipping method name
Coupons
getCoupon()->getCode()
- get the expiration date of an autogenerated coupon code
Usage: Expiration date: <?php echo $this->formatDate($this->getCoupon()->getExpirationDate()) ?>
Different date formats:
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate()) ?>
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::MEDIUM) ?>
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::LONG) ?>
<?php if ($this->getCoupon()): ?>
Let us offer you a discount to complete your purchase.<br>
Your coupon code: <?php echo $this->getCoupon()->getCode() ?> valid till <?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::MEDIUM) ?>
<?php endif ?>
i.e., we only display this text block if a coupon is available.
getCoupon()->getExpirationDate()
- the autogenerated coupon code
Usage: Your coupon code: <?php echo $this->getCoupon()->getCode() ?>
<?php if ($this->getCoupon()): ?>
Let us offer you a discount to complete your purchase.<br>
Your coupon code: <?php echo $this->getCoupon()->getCode() ?>
<?php endif ?>
i.e., we only display this text block if a coupon is available.
Cross-sell products
getCrossSellHtml
- html block of cross sell products
Usage: <?php echo getCrossSellHtml() ?>
<?php if ($this->getCrossSellHtml()): ?>
<h1>See also:</h1>
<?php echo $this->getCrossSellHtml() ?>
<?php endif ?>
i.e., we only display this text block if products are available.
Products Methods
getProductUrl
- a direct link to the product
Usage: <?php echo $item->getProduct()->getProductUrl() ?>
getPrice
- a price of the product
Usage: <?php echo $item->getProduct()->getPrice() ?>
<?php echo $this->formatPrice($item->getProduct()->getPrice()) ?>
getPriceInclTax
- a price of the product with tax (saved in order/shopping cart)
Usage: <?php echo $item->getPriceInclTax() ?>
<?= $this->formatPrice($item->getPriceInclTax()) ?>
getName
- a name of the product
Usage: <a href="<?php echo $item->getProduct()->getProductUrl() ?>"><?php echo $item->getName() ?></a>
Image Directive
Usage:
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'image', 100) ?>"/>
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'small_image', 150) ?>"/>
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'thumbnail) ?>"/>
Wishlist Methods
getWishlist()->getItemCollection()
- return collection of products in wishlist for feature output
Usage:
<?php foreach ($this->getWishlist()->getItemCollection() as $item): ?>
<img src="<?=$this->getImageUrl($item->getProduct(), 'image', 300) ?>"/>
<a href="<?= $item->getProduct()->getProductUrl() ?>"><?php echo $item->getProduct()->getName() ?></a>
<?php endforeach ?>
Alternative way of retrieving wishlist products:
<?php foreach ($this->getWishlistItemCollection() as $item): ?>
<img src="<?=$this->getImageUrl($item->getProduct(), 'image', 300) ?>"/>
<a href="<?php echo $item->getProduct()->getProductUrl() ?>"><?php echo $item->getProduct()->getName() ?></a>
<?php endforeach ?>
getWishlistProduct()
- return last added product to wishlist for feature output
Usage:
<a href="<?php echo $this->getWishlistProduct()->getProductUrl() ?>"><?php echo $this->getWishlistProduct()->getName() ?></a>
Price: <?php echo $this->getWishlistProduct()->getPrice() ?>
Helper Methods
Print all properties for order object:
Usage:
<?php
echo '<pre>';
print_r($this->getOrder()->debug());
echo ' </pre>';
die();
?>
Print all properties for order item object:
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php
echo '<pre>';
print_r($item->debug());
echo ' </pre>';
die();
?>
<?php endforeach ?>
Print all properties for product object:
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php
echo '<pre>';
print_r($item->getProduct()->debug());
echo ' </pre>';
die();
?>
<?php endforeach ?>
Print all properties for customer object:
Usage:
<?php
echo '<pre>';
print_r($this->getCustomer()->debug());
echo ' </pre>';
die();
?>
Print all properties for wishlist object:
Usage:
<?php
echo '<pre>';
print_r($this->getWishlist()->debug());
echo ' </pre>';
die();
?>
[property_code] => property value
[another_property_code] => property value
[one_more_property_code] => property value
Each property can be accessed separately as follows:
<?php echo $this->getOrder()->getPropertyCode() ?>
<?php echo $this->getOrder()->getAnotherPropertyCode() ?>
<?php echo $this->getOrder()->getShippingAddress()->getAnotherPropertyCode() ?>
<?php echo $this->getOrder()->getPayment()->getPropertyCode() ?>
<?php echo $this->getCustomer()->getPropertyCode() ?>
<?php echo $this->getWishlist()->getOneMorePropertyCode() ?>
<?php echo $item->getProduct()->getPropertyCode() ?>
Our extension allows you to use variables and PHP callouts in your emails, which can greatly enhance and personalize them.
Both variables and callouts can be used simultaneously, and are fully interchangeable so you can select your preferred syntax, and use it for all of your customizations.
Liquid is the preferred syntax for use with Email Templates. It allows you to avoid errors with the absence of attributes or values. Moreover, we provide a convenient helper dialog for inserting liquid variables into the editor.
Callouts are deprecated syntax, and used mainly for backward compatibility with older Follow-Up Email versions.
Liquid variables are a new way to enhance email templates. This syntax was introduced in version 1.1.15 and is the preferred syntax for use in Email Templates.
All variables should be enclosed in curly brackets. Each variable can also have a filter, added after pipe sign, and have one or more parameters.
{{ attribute | filter }}
{{ entity.attribute | filter | filter: param1 }}
{{ entity.entity.attribute | filter: param1,param2 }}
These variables can be added interactively from edit pages of Theme or Template.
You just need to press the button Insert Variable near the content element, and select the variable you want to use - as shown below:
Filters are methods that allow you to alter or enhance the output of a variable. They also should be enclosed to the variable block {{
}}
, but separated from the variable with a pipe (|
) character. The parameters of filters are added using the colon (:
) character.
{{ item.product.name | truncate: '150' }}
- truncates the name of the product to 150 characters/{{ item.product.weight | round: '2' }} kg
- rounds the weight of the product to 2 decimal digits
Here is the list of available filters, grouped into categories, with examples:
String/HTML Filters
downcase
- converts a string into lowercase.
{{ item.product.name | downcase }}
Dash Digital Watch
dash digital watch
upcase
- converts a string into uppercase.
{{ item.product.name | upcase }}
Dash Digital Watch
DASH DIGITAL WATCH
replace
- replaces all occurrences of a string with a substring.
{{ item.product.name | replace: 'Digital', 'Analog' }}
Dash Digital Watch
Dash Analog watch
append
- appends characters to a string.
{{ item.product.name | append: ' - best choice' }}
Dash Digital Watch
Dash Digital Watch - best choice
prepend
- prepends characters to a string.
{{ item.product.name | prepend: 'Best choice - ' }}
Dash Digital Watch
Best choice - Dash Digital Watch
capitalize
- capitalizes words in the input sentence.
{{ item.product.color | capitalize }}
dark red
Dark red
escape
- escapes HTML tags in a string.
{{ item.product.description | escape }
newline_to_br
- inserts a <br>
linebreak HTML tag in front of each line break in a string.
{{ item.product.short_description | newline_to_br }
remove
- removes all occurrences of a substring from a string.
{{ item.product.name | remove: 'Digital' }}
Dash Digital Watch
Dash Watch
strip_html
- strips all HTML tags from a string.
{{ item.product.description | strip_html }
truncate
- truncates a string down to 'x' characters.
{{ item.product.name | truncate: '15' }}
Dash Digital Watch
ash Digital Wa
if_empty
- return argument, if the value is an empty string
Dear {{ customer_name | if_empty: 'Client' }}!
empty string
Dear Client!
date
- converts a string to a specified date-time format.
{{ item.product.created_at | date: '%d.%m.%Y %H:%M' }}
2016-02-18 10:11:12
18.02.2016 10:11
Full list of formatters can be found here
format_date
- converts a string to a specified date-time format.
{{ item.product.created_at | format_date: 3 }}
2016-02-18 10:11:12
18/02/16
Possible formatters: 0, 1 , 2 , 3
Numeric Filters
ceil
- rounds the output up to the nearest integer.
{{ item.product.weight | ceil }}
1.423
2
floor
- rounds the output down to the nearest integer.
{{ item.product.weight | floor }}
1.423
1
round
- rounds the output to the nearest integer or specified decimal digits.
{{ item.product.weight | round: '2' }}
1.423
1.42
{{ item.product.weight | round }}
1.423
1
number_format
- formats number to specified format (php function).
{{ item.product.price | number_format: '2', '.', ',' }}
Price/Currency Filters
format_price
- formats price to default format.
{{ item.product.price | format_price }}
100.42
$100.42
convert
- converts a price from base currency to specified currency.
{{ item.product.price | convert: 'EUR' }}
100
92.28
Array Filters
first
- return first element in array.
last
- return last element in array.
join
- join array to string using glue.
size
- return the size of an array or a string.URL Filters
resume
- resume customer's session and redirect it to base URL
{{ item.product.product_url | resume }}
Image Filters
resize
- resize image
{{ item.product.image | resize: 'small_image', 100, 100 }}
http://example.com/pub/media/catalog/product/m/h/mh03-black_main.jpg
http://example.com/pub/media/cache/100x100/catalog/product/m/h/mh03-black_main.jpg
PHP Callouts is a very powerful tool to enhance your templates. It allows you to include PHP code directly to the HTML Code.
Here is the list of possible callouts with respective examples:
Global Methods
getUnsubscribeUrl
- a direct link to unsubscribe from current trigger.
The customer will be unsubscribed from all already scheduled emails (Follow Up Email -> Mail Log (Queue)) for the current trigger.
This link does not unsubscribe customers from future emails (triggered by other events) or native Magento subscription.
Usage: <a href="<?php echo $this->getUnsubscribeUrl() ?>">Unsubscribe</a>
getUnsubscribeAllUrl
- a direct link to unsubscribe from all triggers
The customer will be unsubscribed from all already scheduled emails (Follow Up Email -> Mail Log (Queue)) for all triggers.
This link does not unsubscribe customers from native Magento subscription.
Usage: <a href="<?php echo $this->getUnsubscribeAllUrl() ?>">Unsubscribe</a>
getViewInBrowserUrl
- a direct link to open email in browser
Usage: <a href="<?php echo $this->getViewInBrowserUrl() ?>">View it in your browser.</a>
getResumeUrl
- a direct link to resume (restore, log in) customer session
Usage: <a href="<?php echo $this->getResumeUrl() ?>">Open</a>
i.e., the customer will be automatically authorized in the store.
Additionally, you can pass a parameter to the method to redirect the customer to a specific URL after authorization.
<?php foreach($this->getOrder()->getAllVisibleItems() as $item): ?>
<tr>
<td>
<a href="<?php echo $this->getResumeUrl($item->getProduct()->getProductUrl()) ?>">Review <?php echo $item->getName() ?></a>
</td>
</tr>
<?php endforeach ?>
i.e., the customer will be redirected to the product page to leave a review after automatic authorization.
getStoreUrl
- a direct link to the store home page
Usage: <?php echo $this->getStoreUrl() ?>
getStoreName
- a curent store name
Usage: <?php echo $this->getStoreName() ?>
getStorePhone
- a curent store phone
Usage: <?php echo $this->getStorePhone() ?>
getStoreAddress
- a curent store address
Usage: <?php echo $this->getStoreAddress() ?>
getStoreEmail
- a curent store general transactional email
Usage: <?php echo $this->getStoreEmail() ?>
Customer Methods
getCustomerName
- returns customer's full name
Usage: Dear <?php echo $this->getCustomerName() ?>
You can pass a parameter to the method getCustomerName() which will be used instead of the customer name, if the customer's name is empty: Dear <?php echo $this->getCustomerName(null, 'Customer') ?>
, results in Dear Customer, if customer's name is empty (since version 1.0.34).
getFirstname
- returns customer's firstname (since version 1.0.36)
Usage: Dear <?php echo $this->getFirstname() ?>
getLastname
- returns customer's lastname (since version 1.0.36)
Usage: Dear <?php echo $this->getLastname() ?>
getCustomer
- retrurns customer's object (only for registered customers)
Usage: Hi <?php echo $this->getCustomer()->getFirstname() ?>
<?php echo $this->getCustomer()->getEmail() ?>
Shopping Cart Methods
getRestoreCartUrl
- a direct link to customer shopping cart
Usage: <a href="<?php echo $this->getRestoreCartUrl() ?>">Finish Checkout!</a>
getReorderCartUrl
- redirects the customer to the quote with the products purchased from the previous order
Usage: <a href="<?php echo $this->getReorderCartUrl() ?>">Reorder</a>
getQuote()->getAllVisibleItems()
- return collection of products in cart for feature output
Usage:
<?php foreach ($this->getQuote()->getAllVisibleItems() as $item): ?>
<?php echo $item->getName() ?>
<?php endforeach ?>
How to display only the first product:
<?php $i = 0 ?>
<?php foreach ($this->getQuote()->getAllVisibleItems() as $item): ?>
<?php if ($i++ >= 1): ?>
<?php break ?>
<?php endif ?>
...
other methods
...
<?php endforeach ?>
Order Methods
getOrder()->getStatus()
- the status of order
Usage: order status is <?php echo $this->getOrder()->getStatus() ?>
getOrder()->getIncrementId()
- the order number
Usage: Order #<?php echo $this->getOrder()->getIncrementId() ?>
getOrder()->getStoreGroupName()
- the store name of order
Usage: You placed order in <?php echo $this->getOrder()->getStoreGroupName() ?>
getOrder()->getAllVisibleItems()
- return list of products in order for feature output
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php echo $item->getName() ?>
<?php endforeach ?>
How to display only the first product:
<?php $i = 0 ?>
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php if ($i++ >= 1): ?>
<?php break ?>
<?php endif ?>
...
other methods
...
<?php endforeach ?>
Additional Methods
Usage:
<?php echo $this->getOrder()->getBaseTaxAmount() ?>
<?php echo $this->getOrder()->getBaseGrandTotal() ?>
<?php echo $this->getOrder()->getBaseShippingAmount() ?>
<?php echo $this->getOrder()->getShippingDescription() ?> - returns shipping method name
Coupons
getCoupon()->getCode()
- get the expiration date of an autogenerated coupon code
Usage: Expiration date: <?php echo $this->formatDate($this->getCoupon()->getExpirationDate()) ?>
Different date formats:
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate()) ?>
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::MEDIUM) ?>
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::LONG) ?>
<?php if ($this->getCoupon()): ?>
Let us offer you a discount to complete your purchase.<br>
Your coupon code: <?php echo $this->getCoupon()->getCode() ?> valid till <?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::MEDIUM) ?>
<?php endif ?>
i.e., we only display this text block if a coupon is available.
getCoupon()->getExpirationDate()
- the autogenerated coupon code
Usage: Your coupon code: <?php echo $this->getCoupon()->getCode() ?>
<?php if ($this->getCoupon()): ?>
Let us offer you a discount to complete your purchase.<br>
Your coupon code: <?php echo $this->getCoupon()->getCode() ?>
<?php endif ?>
i.e., we only display this text block if a coupon is available.
Cross-sell products
getCrossSellHtml
- html block of cross sell products
Usage: <?php echo getCrossSellHtml() ?>
<?php if ($this->getCrossSellHtml()): ?>
<h1>See also:</h1>
<?php echo $this->getCrossSellHtml() ?>
<?php endif ?>
i.e., we only display this text block if products are available.
Products Methods
getProductUrl
- a direct link to the product
Usage: <?php echo $item->getProduct()->getProductUrl() ?>
getPrice
- a price of the product
Usage: <?php echo $item->getProduct()->getPrice() ?>
<?php echo $this->formatPrice($item->getProduct()->getPrice()) ?>
getPriceInclTax
- a price of the product with tax (saved in order/shopping cart)
Usage: <?php echo $item->getPriceInclTax() ?>
<?= $this->formatPrice($item->getPriceInclTax()) ?>
getName
- a name of the product
Usage: <a href="<?php echo $item->getProduct()->getProductUrl() ?>"><?php echo $item->getName() ?></a>
Image Directive
Usage:
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'image', 100) ?>"/>
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'small_image', 150) ?>"/>
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'thumbnail) ?>"/>
Wishlist Methods
getWishlist()->getItemCollection()
- return collection of products in wishlist for feature output
Usage:
<?php foreach ($this->getWishlist()->getItemCollection() as $item): ?>
<img src="<?=$this->getImageUrl($item->getProduct(), 'image', 300) ?>"/>
<a href="<?= $item->getProduct()->getProductUrl() ?>"><?php echo $item->getProduct()->getName() ?></a>
<?php endforeach ?>
Alternative way of retrieving wishlist products:
<?php foreach ($this->getWishlistItemCollection() as $item): ?>
<img src="<?=$this->getImageUrl($item->getProduct(), 'image', 300) ?>"/>
<a href="<?php echo $item->getProduct()->getProductUrl() ?>"><?php echo $item->getProduct()->getName() ?></a>
<?php endforeach ?>
getWishlistProduct()
- return last added product to wishlist for feature output
Usage:
<a href="<?php echo $this->getWishlistProduct()->getProductUrl() ?>"><?php echo $this->getWishlistProduct()->getName() ?></a>
Price: <?php echo $this->getWishlistProduct()->getPrice() ?>
Helper Methods
Print all properties for order object:
Usage:
<?php
echo '<pre>';
print_r($this->getOrder()->debug());
echo ' </pre>';
die();
?>
Print all properties for order item object:
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php
echo '<pre>';
print_r($item->debug());
echo ' </pre>';
die();
?>
<?php endforeach ?>
Print all properties for product object:
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php
echo '<pre>';
print_r($item->getProduct()->debug());
echo ' </pre>';
die();
?>
<?php endforeach ?>
Print all properties for customer object:
Usage:
<?php
echo '<pre>';
print_r($this->getCustomer()->debug());
echo ' </pre>';
die();
?>
Print all properties for wishlist object:
Usage:
<?php
echo '<pre>';
print_r($this->getWishlist()->debug());
echo ' </pre>';
die();
?>
[property_code] => property value
[another_property_code] => property value
[one_more_property_code] => property value
Each property can be accessed separately as follows:
<?php echo $this->getOrder()->getPropertyCode() ?>
<?php echo $this->getOrder()->getAnotherPropertyCode() ?>
<?php echo $this->getOrder()->getShippingAddress()->getAnotherPropertyCode() ?>
<?php echo $this->getOrder()->getPayment()->getPropertyCode() ?>
<?php echo $this->getCustomer()->getPropertyCode() ?>
<?php echo $this->getWishlist()->getOneMorePropertyCode() ?>
<?php echo $item->getProduct()->getPropertyCode() ?>
Our extension allows you to use variables and PHP callouts in your emails, which can greatly enhance and personalize them.
Both variables and callouts can be used simultaneously, and are fully interchangeable so you can select your preferred syntax, and use it for all of your customizations.
Liquid is the preferred syntax for use with Email Templates. It allows you to avoid errors with the absence of attributes or values. Moreover, we provide a convenient helper dialog for inserting liquid variables into the editor.
Callouts are deprecated syntax, and used mainly for backward compatibility with older Follow-Up Email versions.
Liquid variables are a new way to enhance email templates. This syntax was introduced in version 1.1.15 and is the preferred syntax for use in Email Templates.
All variables should be enclosed in curly brackets. Each variable can also have a filter, added after pipe sign, and have one or more parameters.
{{ attribute | filter }}
{{ entity.attribute | filter | filter: param1 }}
{{ entity.entity.attribute | filter: param1,param2 }}
These variables can be added interactively from edit pages of Theme or Template.
You just need to press the button Insert Variable near the content element, and select the variable you want to use - as shown below:
Filters are methods that allow you to alter or enhance the output of a variable. They also should be enclosed to the variable block {{
}}
, but separated from the variable with a pipe (|
) character. The parameters of filters are added using the colon (:
) character.
{{ item.product.name | truncate: '150' }}
- truncates the name of the product to 150 characters/{{ item.product.weight | round: '2' }} kg
- rounds the weight of the product to 2 decimal digits
Here is the list of available filters, grouped into categories, with examples:
String/HTML Filters
downcase
- converts a string into lowercase.
{{ item.product.name | downcase }}
Dash Digital Watch
dash digital watch
upcase
- converts a string into uppercase.
{{ item.product.name | upcase }}
Dash Digital Watch
DASH DIGITAL WATCH
replace
- replaces all occurrences of a string with a substring.
{{ item.product.name | replace: 'Digital', 'Analog' }}
Dash Digital Watch
Dash Analog watch
append
- appends characters to a string.
{{ item.product.name | append: ' - best choice' }}
Dash Digital Watch
Dash Digital Watch - best choice
prepend
- prepends characters to a string.
{{ item.product.name | prepend: 'Best choice - ' }}
Dash Digital Watch
Best choice - Dash Digital Watch
capitalize
- capitalizes words in the input sentence.
{{ item.product.color | capitalize }}
dark red
Dark red
escape
- escapes HTML tags in a string.
{{ item.product.description | escape }
newline_to_br
- inserts a <br>
linebreak HTML tag in front of each line break in a string.
{{ item.product.short_description | newline_to_br }
remove
- removes all occurrences of a substring from a string.
{{ item.product.name | remove: 'Digital' }}
Dash Digital Watch
Dash Watch
strip_html
- strips all HTML tags from a string.
{{ item.product.description | strip_html }
truncate
- truncates a string down to 'x' characters.
{{ item.product.name | truncate: '15' }}
Dash Digital Watch
ash Digital Wa
if_empty
- return argument, if the value is an empty string
Dear {{ customer_name | if_empty: 'Client' }}!
empty string
Dear Client!
date
- converts a string to a specified date-time format.
{{ item.product.created_at | date: '%d.%m.%Y %H:%M' }}
2016-02-18 10:11:12
18.02.2016 10:11
Full list of formatters can be found here
format_date
- converts a string to a specified date-time format.
{{ item.product.created_at | format_date: 3 }}
2016-02-18 10:11:12
18/02/16
Possible formatters: 0, 1 , 2 , 3
Numeric Filters
ceil
- rounds the output up to the nearest integer.
{{ item.product.weight | ceil }}
1.423
2
floor
- rounds the output down to the nearest integer.
{{ item.product.weight | floor }}
1.423
1
round
- rounds the output to the nearest integer or specified decimal digits.
{{ item.product.weight | round: '2' }}
1.423
1.42
{{ item.product.weight | round }}
1.423
1
number_format
- formats number to specified format (php function).
{{ item.product.price | number_format: '2', '.', ',' }}
Price/Currency Filters
format_price
- formats price to default format.
{{ item.product.price | format_price }}
100.42
$100.42
convert
- converts a price from base currency to specified currency.
{{ item.product.price | convert: 'EUR' }}
100
92.28
Array Filters
first
- return first element in array.
last
- return last element in array.
join
- join array to string using glue.
size
- return the size of an array or a string.URL Filters
resume
- resume customer's session and redirect it to base URL
{{ item.product.product_url | resume }}
Image Filters
resize
- resize image
{{ item.product.image | resize: 'small_image', 100, 100 }}
http://example.com/pub/media/catalog/product/m/h/mh03-black_main.jpg
http://example.com/pub/media/cache/100x100/catalog/product/m/h/mh03-black_main.jpg
PHP Callouts is a very powerful tool to enhance your templates. It allows you to include PHP code directly to the HTML Code.
Here is the list of possible callouts with respective examples:
Global Methods
getUnsubscribeUrl
- a direct link to unsubscribe from current trigger.
The customer will be unsubscribed from all already scheduled emails (Follow Up Email -> Mail Log (Queue)) for the current trigger.
This link does not unsubscribe customers from future emails (triggered by other events) or native Magento subscription.
Usage: <a href="<?php echo $this->getUnsubscribeUrl() ?>">Unsubscribe</a>
getUnsubscribeAllUrl
- a direct link to unsubscribe from all triggers
The customer will be unsubscribed from all already scheduled emails (Follow Up Email -> Mail Log (Queue)) for all triggers.
This link does not unsubscribe customers from native Magento subscription.
Usage: <a href="<?php echo $this->getUnsubscribeAllUrl() ?>">Unsubscribe</a>
getViewInBrowserUrl
- a direct link to open email in browser
Usage: <a href="<?php echo $this->getViewInBrowserUrl() ?>">View it in your browser.</a>
getResumeUrl
- a direct link to resume (restore, log in) customer session
Usage: <a href="<?php echo $this->getResumeUrl() ?>">Open</a>
i.e., the customer will be automatically authorized in the store.
Additionally, you can pass a parameter to the method to redirect the customer to a specific URL after authorization.
<?php foreach($this->getOrder()->getAllVisibleItems() as $item): ?>
<tr>
<td>
<a href="<?php echo $this->getResumeUrl($item->getProduct()->getProductUrl()) ?>">Review <?php echo $item->getName() ?></a>
</td>
</tr>
<?php endforeach ?>
i.e., the customer will be redirected to the product page to leave a review after automatic authorization.
getStoreUrl
- a direct link to the store home page
Usage: <?php echo $this->getStoreUrl() ?>
getStoreName
- a curent store name
Usage: <?php echo $this->getStoreName() ?>
getStorePhone
- a curent store phone
Usage: <?php echo $this->getStorePhone() ?>
getStoreAddress
- a curent store address
Usage: <?php echo $this->getStoreAddress() ?>
getStoreEmail
- a curent store general transactional email
Usage: <?php echo $this->getStoreEmail() ?>
Customer Methods
getCustomerName
- returns customer's full name
Usage: Dear <?php echo $this->getCustomerName() ?>
You can pass a parameter to the method getCustomerName() which will be used instead of the customer name, if the customer's name is empty: Dear <?php echo $this->getCustomerName(null, 'Customer') ?>
, results in Dear Customer, if customer's name is empty (since version 1.0.34).
getFirstname
- returns customer's firstname (since version 1.0.36)
Usage: Dear <?php echo $this->getFirstname() ?>
getLastname
- returns customer's lastname (since version 1.0.36)
Usage: Dear <?php echo $this->getLastname() ?>
getCustomer
- retrurns customer's object (only for registered customers)
Usage: Hi <?php echo $this->getCustomer()->getFirstname() ?>
<?php echo $this->getCustomer()->getEmail() ?>
Shopping Cart Methods
getRestoreCartUrl
- a direct link to customer shopping cart
Usage: <a href="<?php echo $this->getRestoreCartUrl() ?>">Finish Checkout!</a>
getReorderCartUrl
- redirects the customer to the quote with the products purchased from the previous order
Usage: <a href="<?php echo $this->getReorderCartUrl() ?>">Reorder</a>
getQuote()->getAllVisibleItems()
- return collection of products in cart for feature output
Usage:
<?php foreach ($this->getQuote()->getAllVisibleItems() as $item): ?>
<?php echo $item->getName() ?>
<?php endforeach ?>
How to display only the first product:
<?php $i = 0 ?>
<?php foreach ($this->getQuote()->getAllVisibleItems() as $item): ?>
<?php if ($i++ >= 1): ?>
<?php break ?>
<?php endif ?>
...
other methods
...
<?php endforeach ?>
Order Methods
getOrder()->getStatus()
- the status of order
Usage: order status is <?php echo $this->getOrder()->getStatus() ?>
getOrder()->getIncrementId()
- the order number
Usage: Order #<?php echo $this->getOrder()->getIncrementId() ?>
getOrder()->getStoreGroupName()
- the store name of order
Usage: You placed order in <?php echo $this->getOrder()->getStoreGroupName() ?>
getOrder()->getAllVisibleItems()
- return list of products in order for feature output
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php echo $item->getName() ?>
<?php endforeach ?>
How to display only the first product:
<?php $i = 0 ?>
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php if ($i++ >= 1): ?>
<?php break ?>
<?php endif ?>
...
other methods
...
<?php endforeach ?>
Additional Methods
Usage:
<?php echo $this->getOrder()->getBaseTaxAmount() ?>
<?php echo $this->getOrder()->getBaseGrandTotal() ?>
<?php echo $this->getOrder()->getBaseShippingAmount() ?>
<?php echo $this->getOrder()->getShippingDescription() ?> - returns shipping method name
Coupons
getCoupon()->getCode()
- get the expiration date of an autogenerated coupon code
Usage: Expiration date: <?php echo $this->formatDate($this->getCoupon()->getExpirationDate()) ?>
Different date formats:
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate()) ?>
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::MEDIUM) ?>
<?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::LONG) ?>
<?php if ($this->getCoupon()): ?>
Let us offer you a discount to complete your purchase.<br>
Your coupon code: <?php echo $this->getCoupon()->getCode() ?> valid till <?php echo $this->formatDate($this->getCoupon()->getExpirationDate(), \IntlDateFormatter::MEDIUM) ?>
<?php endif ?>
i.e., we only display this text block if a coupon is available.
getCoupon()->getExpirationDate()
- the autogenerated coupon code
Usage: Your coupon code: <?php echo $this->getCoupon()->getCode() ?>
<?php if ($this->getCoupon()): ?>
Let us offer you a discount to complete your purchase.<br>
Your coupon code: <?php echo $this->getCoupon()->getCode() ?>
<?php endif ?>
i.e., we only display this text block if a coupon is available.
Cross-sell products
getCrossSellHtml
- html block of cross sell products
Usage: <?php echo getCrossSellHtml() ?>
<?php if ($this->getCrossSellHtml()): ?>
<h1>See also:</h1>
<?php echo $this->getCrossSellHtml() ?>
<?php endif ?>
i.e., we only display this text block if products are available.
Products Methods
getProductUrl
- a direct link to the product
Usage: <?php echo $item->getProduct()->getProductUrl() ?>
getPrice
- a price of the product
Usage: <?php echo $item->getProduct()->getPrice() ?>
<?php echo $this->formatPrice($item->getProduct()->getPrice()) ?>
getPriceInclTax
- a price of the product with tax (saved in order/shopping cart)
Usage: <?php echo $item->getPriceInclTax() ?>
<?= $this->formatPrice($item->getPriceInclTax()) ?>
getName
- a name of the product
Usage: <a href="<?php echo $item->getProduct()->getProductUrl() ?>"><?php echo $item->getName() ?></a>
Image Directive
Usage:
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'image', 100) ?>"/>
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'small_image', 150) ?>"/>
<img src="<?php echo $this->getImageUrl($item->getProduct(), 'thumbnail) ?>"/>
Wishlist Methods
getWishlist()->getItemCollection()
- return collection of products in wishlist for feature output
Usage:
<?php foreach ($this->getWishlist()->getItemCollection() as $item): ?>
<img src="<?=$this->getImageUrl($item->getProduct(), 'image', 300) ?>"/>
<a href="<?= $item->getProduct()->getProductUrl() ?>"><?php echo $item->getProduct()->getName() ?></a>
<?php endforeach ?>
Alternative way of retrieving wishlist products:
<?php foreach ($this->getWishlistItemCollection() as $item): ?>
<img src="<?=$this->getImageUrl($item->getProduct(), 'image', 300) ?>"/>
<a href="<?php echo $item->getProduct()->getProductUrl() ?>"><?php echo $item->getProduct()->getName() ?></a>
<?php endforeach ?>
getWishlistProduct()
- return last added product to wishlist for feature output
Usage:
<a href="<?php echo $this->getWishlistProduct()->getProductUrl() ?>"><?php echo $this->getWishlistProduct()->getName() ?></a>
Price: <?php echo $this->getWishlistProduct()->getPrice() ?>
Helper Methods
Print all properties for order object:
Usage:
<?php
echo '<pre>';
print_r($this->getOrder()->debug());
echo ' </pre>';
die();
?>
Print all properties for order item object:
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php
echo '<pre>';
print_r($item->debug());
echo ' </pre>';
die();
?>
<?php endforeach ?>
Print all properties for product object:
Usage:
<?php foreach ($this->getOrder()->getAllVisibleItems() as $item): ?>
<?php
echo '<pre>';
print_r($item->getProduct()->debug());
echo ' </pre>';
die();
?>
<?php endforeach ?>
Print all properties for customer object:
Usage:
<?php
echo '<pre>';
print_r($this->getCustomer()->debug());
echo ' </pre>';
die();
?>
Print all properties for wishlist object:
Usage:
<?php
echo '<pre>';
print_r($this->getWishlist()->debug());
echo ' </pre>';
die();
?>
[property_code] => property value
[another_property_code] => property value
[one_more_property_code] => property value
Each property can be accessed separately as follows:
<?php echo $this->getOrder()->getPropertyCode() ?>
<?php echo $this->getOrder()->getAnotherPropertyCode() ?>
<?php echo $this->getOrder()->getShippingAddress()->getAnotherPropertyCode() ?>
<?php echo $this->getOrder()->getPayment()->getPropertyCode() ?>
<?php echo $this->getCustomer()->getPropertyCode() ?>
<?php echo $this->getWishlist()->getOneMorePropertyCode() ?>
<?php echo $item->getProduct()->getPropertyCode() ?>
This extension allows you to track triggered emails.
Go to Marketing > Follow Up Email > Mail Log (Queue). You will see the following fields:
Click on the triggered email. You will see detailed information about the triggered email in the next tabs: General information, History, Variables.
This extension allows you to track triggered events at the store.
Go to Marketing > Follow Up Email > Event Log. You will see the following fields:
Since our module collects user data for sending emails, please check out some tips for making the extension fully compliant with the GDPR:
{{ url.unsubscribe_newsletter_url }}
- to unsubscribe from all triggers and the newsletter.This section describes the most common problems that customers report and how they can be resolved:
The coupon code is not visible in the email.
Solution:
The block with the selected cross-sell, related, or upsell products is not displayed in the email.
The products for the cross-sell block are selected based on the products associated with the customer's orders or shopping cart.
Before using one of the types as the source for cross-sell block, make sure that an appropriate type of product is configured.
Solution:
Make sure your products have the cross-sell, related, or upsell products:
For more information refer to Magento documentation: https://docs.magento.com/m2/ce/user_guide/catalog/settings-advanced-related-products.html. Also you may find interesting to insert our Related Products for Magento 2 in your emails.
There are several ways to translate emails:
Separate email templates per language:
Use the Magento translation mechanism:
For example, you want to translate the text Shop Now in the Welcome email template. To translate it, copy the source string with this text to the CSV file located in your theme directory. The translation may look as follows:
<a href="{{ store.store_url }}">Shop Now</a>
<a href="{{ store.store_url }}">Shop Right Now</a>
Or if you want translate the subject:
Hello {{ customer_name }}!, Hola {{ customer_name }}!
According to the Magento security policies starting with the module-email version 2.1.28 and module-email-designer version 1.1.31 ability to use php code in the templates was disabled.
If this ability is vital for your store, it is possible to revert the function code located at the file vendor/mirasvit/module-email-designer/src/EmailDesigner/Service/TemplateEngine/Php.php
Should be modified function getHtml
with the next code:
private function getHtml($tplPath)
{
ob_start();
include $tplPath;
$html = ob_get_clean();
return $html;
}
To fix this, open the /app/etc/env.php
file and check if you have the consumers section.
...
'cron_consumers_runner' => [
'cron_run' => false,
'max_messages' => 20000,
'consumers' => [
'consumer1',
'consumer2'
]
],
...
If you have it, you should add our job 'mirasvit.event.mq.register'
to the list. Once added, run the command php -f bin/magento queue:consumers:start mirasvit.event.mq.register
to start it.
Example:
...
'cron_consumers_runner' => [
'cron_run' => false,
'max_messages' => 20000,
'consumers' => [
'product_action_attribute.update',
'inventory.source.items.cleanup',
'mirasvit.event.mq.register'
]
],
...
To upgrade the extension, take the following steps:
composer require mirasvit/module-email:* --update-with-dependencies
to update the current extension with all dependencies.
composer update mirasvit/*
command. It will update all Mirasvit modules installed in your store. php -f bin/magento setup:upgrade
to install updates.php -f bin/magento cache:clean
to clean the cache.Deploy static view files
rm -rf pub/static/*; rm -rf var/view_preprocessed/*; php -f bin/magento setup:static-content:deploy
To temporarily disable the extension, please take the following steps:
php -f bin/magento module:disable Mirasvit_Email Mirasvit_EmailDesigner Mirasvit_EmailReport
to disable the extension.To uninstall the extension, please take the following steps:
composer remove mirasvit/module-email
to remove the extension.(2024-12-18)
(2024-12-10)
(2024-12-02)
(2024-11-25)
(2024-10-02)
(2024-07-24)
(2024-06-14)
(2024-06-03)
(2024-05-27)
(2024-04-11)
(2024-03-06)
(2024-02-13)
(2024-01-25)
(2024-01-18)
(2023-12-19)
(2023-12-08)
(2023-11-10)
(2023-11-06)
(2023-10-13)
(2023-08-15)
(2023-08-02)
(2023-07-06)
(2023-06-15)
(2023-06-13)
(2023-06-05)
(2023-03-27)
(2023-02-07)
(2022-10-13)
(2022-10-12)
(2022-09-16)
(2022-08-16)
(2022-08-09)
(2022-07-15)
(2022-07-13)
(2022-06-28)
(2022-06-23)
(2022-06-22)
(2022-06-20)
(2022-05-25)
(2022-05-23)
(2020-11-03)
(2020-09-07)
(2020-07-29)
(2020-06-18)
(2020-05-27)
(2020-03-13)
(2020-03-04)
(2020-02-26)
(2020-02-18)
(2020-02-10)
(2020-01-08)
(2020-01-08)
(2019-12-16)
(2019-12-05)
(2019-12-03)
(2019-11-05)
(2019-10-31)
(2019-08-14)
(2019-07-30)
(2019-07-11)
(2019-06-26)
(2019-04-22)
(2019-03-27)
(2019-03-22)
(2019-03-18)
(2019-02-21)
(2019-02-11)
(2019-02-08)
(2018-12-24)
(2018-12-10)
(2018-11-30)
(2018-10-22)
(2018-10-03)
(2018-09-26)
(2018-09-06)
(2018-09-05)
(2018-08-30)
(2018-08-29)
(2018-08-03)
(2018-07-31)
(2018-07-13)
(2018-07-09)
(2018-07-09)
(2018-07-03)
(2018-06-28)
(2018-05-31)
(2018-05-24)
(2018-05-17)
(2018-05-11)
(2018-05-11)
(2018-04-27)
(2018-03-02)
(2018-02-27)
(2018-02-16)
(2018-02-12)
(2018-02-09)
(2018-01-30)
(2018-01-26)
(2018-01-24)
(2018-01-18)
(2018-01-16)
(2017-12-11)
(2017-12-01)
(2017-11-23)
(2017-11-03)
(2017-11-01)
(2017-11-01)
(2017-10-30)
(2017-10-30)
(2017-10-27)
(2017-10-27)
(2017-10-26)
(2017-09-28)
(2017-09-27)
(2017-09-05)
(2017-09-04)
(2017-09-04)
(2017-09-01)
(2017-09-01)
(2017-08-31)
(2017-08-31)
(2017-08-30)
(2017-08-11)
(2017-08-10)
(2017-07-19)
(2017-07-14)
(2017-07-14)
(2017-06-29)
(2017-06-29)
(2017-06-21)
(2017-06-20)
(2017-06-13)
(2017-06-12)
(2017-05-12)
(2017-05-04)
(2017-05-03)
(2017-04-28)
(2017-04-19)
(2017-04-12)
(2017-03-29)
(2017-03-24)
(2017-03-20)
(2017-03-17)
(2017-03-16)
(2017-03-07)
(2017-03-02)
(2017-02-20)
(2017-01-30)
(2017-01-25)
(2017-01-23)
(2017-01-06)
(2017-01-05)
(2016-12-23)
(2016-12-16)
(2016-09-14)
(2016-09-08)
(2016-08-11)
(2016-07-28)
(2016-06-24)
(2016-05-27)
(2016-05-20)
(2016-04-11)
(2016-03-28)
(2016-02-18)
(2017-10-30)
(2017-09-04)
(2017-08-31)
(2017-05-29)
(2017-04-28)
(2017-03-16)
(2017-01-27)
(2017-01-26)
(2016-09-08)
(2016-06-21)
(2016-05-06)
(2016-04-18)
(2017-12-07)
(2017-12-06)
(2017-12-05)
(2017-11-30)
(2017-11-27)
(2017-11-15)
(2017-11-03)
(2017-10-30)
(2017-10-30)
(2017-10-26)
(2017-10-20)
(2017-09-28)
(2017-09-26)
(2017-09-18)
(2017-08-09)
(2017-08-02)
(2017-07-19)
(2017-07-12)
(2017-07-11)
(2017-06-21)
(2017-06-21)
(2017-06-01)
(2017-05-31)
(2017-05-15)
(2017-05-04)
(2017-03-21)
(2017-03-06)
(2017-02-27)
(2017-01-31)
(2017-01-25)
(2017-01-20)
(2017-01-13)
(2016-12-15)
(2016-12-09)
(2016-09-27)
(2016-09-13)
(2016-09-05)
(2016-09-01)
(2016-08-15)
(2016-07-01)
(2016-06-24)
(2016-05-31)
(2016-05-27)
(2016-05-25)
(2016-05-19)
(2017-10-30)
(2017-09-19)
(2017-09-04)
(2017-09-01)
(2017-08-30)
(2016-04-18)
(2017-11-21)
(2017-10-31)
(2017-10-31)
/** @var \Mirasvit\Mq\Api\PublisherInterface $publisher */
$publisher = $this->objectManager->create('Mirasvit\Mq\Api\PublisherInterface');
$publisher->publish('mirasvit.event', [microtime(true)]);
di.xml
<type name="Mirasvit\Mq\Api\Repository\ConsumerRepositoryInterface">
<arguments>
<argument name="consumers" xsi:type="array">
<item name="notificator" xsi:type="array">
<item name="queue" xsi:type="string">mirasvit.event</item>
<item name="callback" xsi:type="string">Mirasvit\Testing\Model\Processor::process</item>
</item>
</argument>
</arguments>
</type>
(2017-12-01)
(2017-11-24)
(2017-11-23)
(2017-11-22)
(2017-11-01)
(2017-10-31)
(2017-10-30)
(2017-10-30)
(2017-10-26)
(2017-10-19)
(2017-10-19)
(2017-10-12)
(2017-09-27)
(2017-09-27)
(2017-09-19)
(2017-09-18)
(2017-09-18)
(2017-06-15)