创意之子 / cookieconsent
废弃:请参阅readme - Cookieconsent overlay with required optin and ways to block cookies and external resources
Requires
- php: ^7 || ^8
- contao/core-bundle: ~4.4 || ~4.9 || ~4.13
- terminal42/dcawizard: 2.*
README
废弃:该项目不再维护,可能不再符合GDPR规定。我们建议使用Consentmanager作为功能更丰富且符合GDPR规定的替代方案。
Cookie optin with brainsum/cookieconsent作为overlay以及阻止cookie和外部资源的方式。
注意:版本3有重大破坏性更改,与旧版本不兼容。但是,如果您在v2中找到错误或问题,请在我们这里提交问题,我们会考虑更新v2。
安装
通过contao-manager安装或使用composer require kreativsoehne/cookieconsent
。
运行数据库更新。
使用
一些基本设置将通过根页面提供。此外,它还添加了一个新的后端模块,允许您根据需要编辑类别和服务/cookie。
Cookieconsent自定义
有关特定设置的更多信息,请参阅cookieconsent 文档。
默认类别与服务
您可以从此处下载数据库转储,其中包含一系列类别和cookie/services,我们认为它们足够常见且符合GDPR规定(到目前为止)。大部分为英文和德文翻译,但我们将随着新语言的到来更新它们(如果您想帮忙,请提交问题或提交拉取请求,我们将更新数据库转储并添加您的翻译)。还有针对根页配置的单独转储,每种语言一个:英文和德文,其中包含cookieconsent层本身的基本文本。
您可以通过phpmyadmin等工具导入这些内容。注意:自行决定使用。在没有测试的情况下不要将任何内容导入到实时系统中!
语言
通过模板文件cookieconsent_language
,可以自定义前端语言设置或根据需要添加更多设置。格式是一个基本的JavaScript对象。
打开设置层
如果您需要一个链接/按钮来打开cookie设置(第二层),您可以使用内容元素"Cookieconsent切换"。
也可以手动渲染其模板
<?= $this->insert('ce_cookieconsent_toggle', [ 'iconClass' => 'fa fa-cookie-bite', 'label' => 'Cookie Settings', ]) ?>
选项有
类别
在Backend模块Category
中,您可以编辑第二层中的类别列表。默认情况下,您应该至少有这三个类别,具体取决于您使用的服务
- 必需的cookie(别名:
necessary
,即PHPSESSID、Contao Token) - 分析(别名:
analytics
,即Google Analytics/Tag Manager) - 外部(别名:
external
,即YouTube/Vimeo)
它们的别名用于后续启用或禁用特定功能。
服务
在后端模块 Services/Cookies
中,您可以编辑每个类别中服务的列表或单个cookie。
类型
每个服务可能有一个特定的类型。根据类型,如果用户的上级类别不允许,cookieconsent工具将尝试阻止服务(或其cookie)。
注意:通过任何这些自动阻止可能并不总是有效,因为这很大程度上取决于服务或cookie以及它们的设置方式。因此,以下提供几种强制手动阻止服务和或cookie的方法。
阻止分析
这适用于Contao 4.9及以上版本。如果您想阻止分析等,请扩展模板 analytics_google.html5
并替换此行
+ $ccChoices = json_decode(html_entity_decode(\Input::cookie('cconsent'))); + $allowedAnalyticsCookies = $ccChoices !== null && is_object($ccChoices->categories) && is_object($ccChoices->categories->analytics) && $ccChoices->categories->analytics->wanted === true; + - if ($GoogleAnalyticsId != 'UA-XXXXX-X' && !BE_USER_LOGGED_IN && !$this->hasAuthenticatedBackendUser()): ?> + if ($GoogleAnalyticsId != 'UA-XXXXX-X' && !BE_USER_LOGGED_IN && !$this->hasAuthenticatedBackendUser() && $allowedAnalyticsCookies == true): ?>
这样,只有在用户事先接受分析类别后,才会渲染分析或其他代码。
对于Contao 4.4
遗憾的是,与4.9及更高版本相比,Contao 4.4有一个不同的缓存方案,因此在4.4(以及可能低于4.9的任何其他版本)中,上述if条件将不起作用。相反,必须在JavaScript代码中检查条件,因此模板 analytics_google.html5
需要如下所示
<?php /** * To use this script, please fill in your Google Analytics ID below */ $GoogleAnalyticsId = 'UA-XXXXX-X'; /** * DO NOT EDIT ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING! */ if ($GoogleAnalyticsId != 'UA-XXXXX-X' && !BE_USER_LOGGED_IN && !$this->hasAuthenticatedBackendUser()): ?> <script> var ccChoices = document.cookie.match(new RegExp('(^| )cconsent=([^;]+)')); if (ccChoices !== null) { try { ccChoices = JSON.parse(ccChoices[2]); } catch (e) { ccChoices = null; } } if (ccChoices !== null && typeof ccChoices === 'object' && typeof ccChoices.categories.analytics === 'object' && ccChoices.categories.analytics.wanted === true) { (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','https://#/analytics.js','ga'); ga('create', '<?= $GoogleAnalyticsId ?>', 'auto'); <?php if (Config::get('privacyAnonymizeGA')): ?> ga('set', 'anonymizeIp', true); <?php endif; ?> ga('send', 'pageview'); } </script> <?php endif; ?>
阻止YouTube & Vimeo
如果用户未接受测量用途的cookie,将自动阻止YouTube和Vimeo的内容元素。您可以通过模板 cookieconsent_blocknotice.html5
编辑阻止消息,并通过 TL_LANG
变量编辑其文本。
阻止其他内容
如果您需要阻止其他内容,则这些if条件可能会有所帮助。在这些示例中,我们检查用户是否接受了 Analytics
服务/cookie。
在PHP中
<?php $ccChoices = json_decode(html_entity_decode(\Input::cookie('cconsent'))); $allowedAnalyticsCookies = $ccChoices !== null && is_object($ccChoices->categories) && is_object($ccChoices->categories->analytics) && $ccChoices->categories->analytics->wanted === true; if ($allowedAnalyticsCookies === true) { // User allowed cookies of category "analytics" // Your php code here } ?>
在模板中(注意:这仅在4.9及以上版本中有效)
<?php $ccChoices = json_decode(html_entity_decode(\Input::cookie('cconsent'))); $allowedAnalyticsCookies = $ccChoices !== null && is_object($ccChoices->categories) && is_object($ccChoices->categories->analytics) && $ccChoices->categories->analytics->wanted === true; ?> <?php if ($allowedAnalyticsCookies === true): ?> // User allowed cookies of category "analytics" // Your template code here <?php endif; ?>
在JavaScript中
var ccChoices = document.cookie.match(new RegExp('(^| )cconsent=([^;]+)')); if (ccChoices !== null) { try { ccChoices = JSON.parse(ccChoices[2]); } catch (e) { ccChoices = null; } } if (ccChoices !== null && typeof ccChoices === 'object' && typeof ccChoices.categories.analytics === 'object' && ccChoices.categories.analytics.wanted === true) { // User allowed cookies of category "analytics" // Your js code here }
版权
版权所有 2021 Kreativ&Soehne GmbH (https://www.kreativundsoehne.de)
有关更多信息,请参阅LICENSE。有关 brainsum/cookieconsent
的许可信息,请参阅此处。