Landing pages
Note
The content for this page requires a major update. The legacy page contains outdated and potentially inaccurate information. You can still access it in the Mautic Developer Documentation archived repository.
If you’re interested in helping develop the new content for this page and others, consider joining the documentation efforts.
Please read the Contributing Guidelines and Contributing to Mautic’s documentation to get started.
There are two way to extend Landing Pages: - Landing Page tokens used to insert Dynamic Content into a Landing Page - A/B test winning criteria
Both leverage the \Mautic\PageBundle\PageEvents::PAGE_ON_BUILD event. Read more about Event listeners.
Landing Page tokens
Landing Page tokens get handled exactly the same as Email tokens.
Page A/B Test Winner Criteria
Custom Landing Page A/B test winner criteria get handled exactly the same as Email A/B test winner criteria with the only differences being that the callback function gets passed Mautic\PageBundle\Entity\Page $page and Mautic\PageBundle\Entity\Page $parent instead.
$children is an ArrayCollection of Page entities as well.
Below is an example of both Landing Page Tokens and Landing Page A/B Test Winner Criteria.
<?php
// plugins/HelloWorldBundle/EventListener/PageSubscriber.php
declare(strict_types=1);
namespace MauticPlugin\HelloWorldBundle\EventListener;
use Mautic\CoreBundle\Helper\TemplatingHelper;
use Mautic\PageBundle\PageEvents;
use Mautic\PageBundle\Event\PageBuilderEvent;
use Mautic\PageBundle\Event\PageDisplayEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PageSubscriber implements EventSubscriberInterface
{
private TemplatingHelper $templating;
public function __construct(TemplatingHelper $templating)
{
$this->templating = $templating;
}
static public function getSubscribedEvents()
{
return [
PageEvents::PAGE_ON_BUILD => ['onPageBuild', 0],
PageEvents::PAGE_ON_DISPLAY => ['onPageDisplay', 0]
];
}
/**
* Register the tokens and a custom A/B test winner
*/
public function onPageBuild(PageBuilderEvent $event)
{
// Add page token
$event->addToken('{helloworld.token}', 'Helloworld token');
// Add AB Test Winner Criteria
$event->addAbTestWinnerCriteria(
'helloworld.planetvisits',
array(
// Label to group by
'group' => 'plugin.helloworld.header',
// Label for this specific a/b test winning criteria
'label' => 'plugin.helloworld.pagetokens.',
// Static callback function that will be used to determine the winner
'callback' => '\MauticPlugin\HelloWorldBundle\Helper\AbTestHelper::determinePlanetVisitWinner'
)
);
}
/**
* Search and replace tokens with content
*/
public function onPageDisplay(PageDisplayEvent $event)
{
// Get content
$content = $event->getContent();
// Search and replace tokens
$content = str_replace(
'{helloworld.token}',
$this->templating->render('HelloWorldBundle:SubscribedEvents\PageToken:token.html.php');,
$content
);
// Set updated content
$event->setContent($content);
}
}