Landing pages

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);
    }
}