lexik / data-layer-bundle
从您的Symfony应用程序中操作Google Tag Manager数据层。
Requires
- symfony/framework-bundle: ~2.7|~3.0|~4.0
- symfony/security-bundle: ~2.7|~3.0|~4.0
- twig/twig: ~1.0|~2.0
Requires (Dev)
- symfony/phpunit-bridge: ~3.3
- symfony/yaml: ^2.7|^3.0|^4.0
This package is auto-updated.
Last update: 2024-09-21 20:33:56 UTC
README
从您的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文件。
鸣谢
- Nicolas Cabot n.cabot@lexik.fr
- Lexik dev@lexik.fr
- 所有贡献者
许可证
此包受MIT许可证的约束。请参阅包中的完整许可证。
Resources/meta/LICENSE