Создание действия или редиректа

Пример создания скрипта

Для примера создадим новый редирект «Myredirect».

Создайте файл /application/redirects/myredirect.php.

<?php
namespace Redirects;
 
use Component\Streams\Model\BaseStream;
use Component\Clicks\Model\RawClick;
use Component\StreamActions\AbstractAction;
 
class myredirect extends AbstractAction
{
    protected $_name = 'MyRedirect'; // имя действия
    protected $_weight = 100;
 
    public function getType()
    {
        return self::TYPE_REDIRECT;
        // return self::TYPE_OTHER; // если нужно пометить скрипт как "Действие"
    }
 
    protected function _execute(BaseStream $stream, RawClick $rawClick)
    {
        // Здесь располагается код нашего скрипта  
        $this->addHeader("Location: " . $rawClick->getDestination());   // Отправка HTTP-header
        $this->setContent('Redirecting...');        // Вывести текст на страницу
    }
}

Важно, чтобы имя файла совпадало с именем класса.

Какие методы доступны в $stream и $rawClick?

Читайте на страницах $rawClick, $stream.

Как добавить код ремаркетинга или метрики?

Рассмотрим на примере добавления пикселя FaceBook.

Создайте файл application/redrects/remarketing.php. С кодом:

<?php
namespace Redirects;
 
use Component\Streams\Model\BaseStream;
use Component\Clicks\Model\RawClick;
use Component\StreamActions\AbstractAction;
 
class example extends AbstractAction
{
    protected $_name = 'Example';
    protected $_weight = 100;
 
    protected function _execute(BaseStream $stream, RawClick $rawClick)
    {
         $this->setContent($this->_getJavascriptRedirect($stream, $rawClick));
    }
 
    private function _getJavascriptRedirect(Stream $stream, RawClick $rawClick)
    {
    $remarketing = <<<EOF
    <!-- Код ремаркетинга -- >
 
    <!-- Facebook Pixel Code -->
    <script>
    !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
    n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
    n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
    t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
    document,'script','https://connect.facebook.net/en_US/fbevents.js');
 
    fbq('init', '1914721942087471');
    fbq('track', "PageView");</script>
    <noscript><img height="1" width="1" style="display:none"
    src="https://www.facebook.com/tr?id=1914721942087472&ev=PageView&noscript=1"
    /></noscript>
    <!-- End Facebook Pixel Code -->
EOF;
 
    $code = '<html>
    <head>
        ' . $remarketing . '
        <meta http-equiv="REFRESH" content="1; URL=\'' . $rawClick->getDestination() . '\'">            
        <script type="text/javascript">window.location = "' . $rawClick->getDestination() . '";</script>
    </head>
    <body>
        The Document has moved <a href="' . $rawClick->getDestination() . '">here</a>
    </body>
    </html>';
 
    return $code ;
  }
}

В каком формате должна быть ссылка для действия REMOTE?

Страница, на которую ссылается REMOTE, должна возвращать только новый адрес

http://domain.com/page

или домен

domain2.com