eZ Mautic エクステンション

## eZ Mautic エクステンション
この記事は [Mautic Advent Calendar 2016](http://www.adventar.org/calendars/1402) の21日目の担当になります。4日ほど遅刻してしまい面目ありません。

本来は Symfony の Bundle で色々機能をつけて作成したかったのですが、時間がなかったためレガシースタックベースで Mautic のスニペットを出力するエクステンションを作成しました。
eZ Publish 5.x のレガシーテンプレートまたは eZ Publish 4.x 用になります。

eZ Platform への対応、GitHub および Composer での公開については追って対応したいと思います。

## 作り方
### エクステンションのベースの作成
#### ディレクトリーの作成
```bash
mkdir ezpublish_legacy/extension/ezmautic
```
レガシースタックベースのエクステンションは ezpublish_legacy 配下の extension ディレクトリーに配置します。

#### エクステンション情報の作成
エクステンション情報として、エクステンションのルートに extension.xml ファイルを作成します。 [^extension-load-ordering]
この情報は管理画面の /ez/ezinfo/about で出力されます。

[^extension-load-ordering]: https://doc.ez.no/eZ-Publish/Technical-manual/4.7/Installation/Extensions/Extension-load-ordering

```bash
cat << "_EOF_" > ezpublish_legacy/extension/ezmautic/extension.xml
<?xml version="1.0" encoding="utf-8" ?>
<software>
    <metadata>
        <name>eZ Mautic</name>
        <version>0.0.1</version>
        <copyright>Copyright (C) 2016-2017 Bezeklik Tecnica</copyright>
        <license>GNU General Public License v2.0</license>
    </metadata>
</software>
_EOF_
```
### オートロードファイルの作成
```bash
mkdir extension/ezmautic/autoloads
cat << "_EOF_" > ezpublish_legacy/extension/ezmautic/autoloads/eztemplateautoload.php
<?php
$eZTemplateOperatorArray = array();
$eZTemplateOperatorArray[] = array( 'script' => 'extension/ezmautic/autoloads/ezmautictemplatefunctions.php',
                                    'class' => 'ezMauticTemplateFunctions',
                                    'operator_names' => array_keys( ezMauticTemplateFunctions::$operators ) );
_EOF_
```
### クラスの作成
```bash
cat << "_EOF_" > ezpublish_legacy/extension/ezmautic/autoloads/ezmautictemplatefunctions.php
<?php
class ezMauticTemplateFunctions
{
    static $operators = array(
        'ezmautic_script' => array(),
    );

    function operatorList()
    {
        return array_keys( self::$operators );
    }

    function namedParameterPerOperator()
    {
        return true;
    }

    function namedParameterList()
    {
        return self::$operators;
    }

    function modify( $tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters )
    {
        switch ( $operatorName )
        {
            case 'ezmautic_script':
            {
                $operatorValue = self::getMauticSnippet();
            } break;
        }
    }
    public static function getMauticSnippet()
    {
        return <<< EOS
<script>
    (function(w,d,t,u,n,a,m){w['MauticTrackingObject']=n;
        w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},a=d.createElement(t),
        m=d.getElementsByTagName(t)[0];a.async=1;a.src=u;m.parentNode.insertBefore(a,m)
    })(window,document,'script','{$base_url}/mtc.js','mt');
    mt('send', 'pageview');
</script>
EOS;
    }
}
_EOF_
```
## エクステンションの有効化
管理画面の「システム設定」タブの「エクステンション」を開き、 リストから ezmautic にチェックを入れ、「更新」ボタンを押下してエクステンションを有効化、その後「エクステンション用のオートーロード配列の再生成」ボタンを押下してオートロード配列を再生成します。

![extension.png](https://qiita-image-store.s3.amazonaws.com/0/15175/6673092a-6a86-be58-399c-cc8781707774.png)

## テンプレート
テンプレートに以下のタグを挿入することでスニペットが出力されます。

```smarty
{ezmautic_script}
```