lexik / data-layer-bundle

从您的Symfony应用程序中操作Google Tag Manager数据层。

安装数: 110,796

依赖项: 0

建议者: 0

安全: 0

星标: 14

关注者: 7

分支: 5

开放问题: 4

类型:symfony-bundle

v1.1.1 2018-02-25 15:50 UTC

This package is auto-updated.

Last update: 2024-09-21 20:33:56 UTC


README

Latest Stable Version Build Status Scrutinizer Code Quality SensioLabsInsight

从您的Symfony应用程序中操作Google Tag Manager数据层。此包与Symfony 2.7+、3.0+和4.0+以及PHP 5.4+至7.0+兼容。

安装

lexik/data-layer-bundle添加到您的composer.json文件中。

composer require "lexik/data-layer-bundle"

app/AppKernel.php中注册该包。

public function registerBundles()
{
    return array(
        // ...
        new Lexik\Bundle\DataLayerBundle\LexikDataLayerBundle(),
    );
}

向数据层添加信息

要向数据层传递信息,请直接使用lexik_data_layer.manager.data_layer_manager服务。

事件/会话数据

用例

通知可能用作目标或转换的应用程序事件,例如用户注册。

用法

获取服务lexik_data_layer.manager.data_layer_manager并将其传递到其add()方法中,它将存储在会话中,直到传递到页面。就像一个闪存消息。

使用会话作为存储允许您在例如重定向后通知事件。

从事件监听器中通知用户注册的示例用法

<?php

namespace AppBundle\Listener;

use Lexik\Bundle\DataLayerBundle\Manager\DataLayerManager;

/**
 * UserEventListener
 */
class UserEventListener
{
    /**
     * @var DataLayerManager
     */
    protected $manager;

    /**
     * @param DataLayerManager $manager
     */
    public function __construct(DataLayerManager $manager)
    {
        $this->manager = $manager;
    }

    /**
     * onUserRegistration
     */
    public function onUserRegistration()
    {
        $this->manager->add(['registration' => true]);
    }
}
<service id="app.listener.user_event_listener" class="AppBundle\Listener\UserEventListener">
    <argument type="service" id="lexik_data_layer.manager.data_layer_manager" />
    <tag name="kernel.event_listener" event="fos_user.registration.completed" method="onUserRegistration" />
</service>

默认数据

用例

例如,在每个页面上设置用户ID。

用法示例

创建一个实现Lexik\Bundle\DataLayerBundle\Collector\CollectorInterface的服务,并使用lexik_data_layer.collector标签进行标记。

它的handle方法将传递当前的数据层数组,您可以添加或修改其值。

<?php

namespace Lexik\Bundle\DataLayerBundle\Collector;

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * UserIdCollector
 */
class UserIdCollector implements CollectorInterface
{
    /**
     * @var TokenStorageInterface
     */
    protected $tokenStorage;

    /**
     * @param TokenStorageInterface $tokenStorage
     */
    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    /**
     * {@inheritdoc}
     */
    public function handle(&$data)
    {
        $token = $this->tokenStorage->getToken();

        if ($token->getUser() && $token->getUser() instanceof UserInterface) {
            $data[] = ['user_id' => md5($token->getUser()->getUsername())];
        }
    }
}
<service id="lexik_data_layer.collector.user_id" class="Lexik\Bundle\DataLayerBundle\Collector\UserIdCollector">
    <argument type="service" id="security.token_storage" />
    <tag name="lexik_data_layer.collector" />
</service>

向页面添加/写入数据层变量

使用提供的lexik_data_layer()twig函数将数据层值写入页面模板。这将自动重置会话中存储的数据层信息。

别忘了在插入Tag Manager标签之前使用它。

<body>
  <script>
    var dataLayer = {{ lexik_data_layer() }};
  </script>
  <!-- Google Tag Manager -->
  ...
  <!-- End Google Tag Manager -->

测试

使用Composer设置测试套件。

$ composer install

使用PHPUnit运行它。

$ vendor/bin/phpunit

贡献

CONTRIBUTING文件。

鸣谢

许可证

此包受MIT许可证的约束。请参阅包中的完整许可证。

Resources/meta/LICENSE