kaufmanndigital/gdpr-cookieconsent

一个可直接运行的包,将高级cookie同意横幅集成到您的Neos CMS网站上。

安装次数: 32,515

依赖: 0

建议者: 0

安全性: 0

星级: 26

关注者: 3

分支: 11

开放性问题: 4

语言:JavaScript

类型:neos-package


README

一个可直接运行的包,将高级cookie同意横幅集成到您的Neos CMS网站上。
这是我们对之前cookie同意包的进一步开发。通过针对每个服务(cookie)的单独配置,这个包是创建符合GDPR要求的网站的完美基础。

版本

本包有多种版本。在这里您可以检查兼容性和维护状态。

安装

比您想象的要简单!
只需运行 composer require kaufmanndigital/gdpr-cookieconsent(或需要上面列出的版本之一)

安装后,需要运行doctrine迁移:./flow doctrine:migrate

配置

由于这个包已经准备好运行,您只需几步就可以配置您的cookie横幅。

  1. 在您的网站树中创建一个新的Cookie设置页面(包含在包中)。
  2. 切换到新创建的页面,并根据您的意愿编辑cookie横幅内容。
  3. 将cookie组添加到横幅中。

按维度同意

如果您在Neos中配置了一个或多个维度,并且需要保存不同维度的不同同意,您可以使用Settings.yaml进行配置

KaufmannDigital:
  GDPR:
    CookieConsent:
      consentDimensions:
        - country

此示例将为每个用户保存不同国家的不同同意。这意味着,当用户第一次切换到另一个国家时,他将再次看到CookieConsent。
它还影响了内容在cookie中的存储方式。现在在"consents"中有多个条目,而不是一个键"default",每个维度(-组合)都有自己的条目。一个简短的例子

{
  "consents": {
    "deu": [
      "necessary",
      "analytics",
      "marketing"
    ],
    "dnk": [
      "necessary",
      "analytics",
      "marketing"
    ]
  },
  "consentDate": "Tue, 11 Feb 2020 11:35:23 GMT",
  "expireDate": "Wed, 10 Feb 2021 23:00:00 GMT"
}

如果您在consentDimensions中配置了多个维度,它们将在这里使用下划线连接。例如:deu_de

排除特殊页面(如 imprint)

您有两种方法可以排除特殊页面显示Cookie-Settings。如果您有一个想要排除的特殊节点类型,您可以通过Settings.yaml将其设置为通用规则

KaufmannDigital:
  GDPR:
    CookieConsent:
      excludeDocumentNodeTypes:
        - 'Vendor.Package:Document.Imprint'

或者,您可以选择后端中的所有类型的文档节点
excluded documents

第一次交互后显示横幅

例如,在SEO方面,在用户第一次交互后显示横幅是有意义的。您可以轻松地配置包以这种方式运行

KaufmannDigital:
  GDPR:
    CookieConsent:
      hideBeforeInteraction: true

自动接受必要的cookie

在某些情况下,您可能需要在不进行用户交互的情况下接受必要的cookie。在这种情况下,您可以轻松地将以下内容添加到您的HTML中

<script>var KD_GDPR_CC_ACCEPT_NECESSARY = true;</script>

这使得包在没有显示同意窗口的情况下自动接受必要的cookie。当然,用户仍然可以手动打开窗口来调整决定。

通过头部接受

如果您正在从其他网站或应用程序加载站点内容,您已经拥有了所需的同意。如果是这样,您可以配置默认接受您的同意的头部。

KaufmannDigital:
  GRDPR:
    CookieConsent:
      headerConsent:
        acceptAll:
          'User-Agent': 'Accepting-All-Agent*'
        acceptNecessary:
          'User-Agent': 'Accepting-needed-Agent*'

在这里,您可以使用fnmatch()的语法进行通配符或类似操作。

通过URL参数接受

您还可以通过URL参数接受所有cookie或必要的cookie。请参阅配置方法

KaufmannDigital:
  GRDPR:
    CookieConsent:
      parameterConsent:
        acceptAll:
          'gdpr': 'accept-all'
        acceptNecessary:
          'gdpr': 'accept-needed'

在此示例中,您可以通过调用带有参数 ?gdpr=accept-all 的每个页面来接受所有cookie,并通过参数 ?gdpr=accept-needed 接受必要的cookie。
您还可以为每个案例定义多个参数/值组合。

响应用户的cookie决策

您可以使用这些方法之一来响应用户对哪些cookie接受的决策

动态加载JavaScript

当您在横幅中添加cookie时,可以粘贴您的JavaScript代码。该包将评估用户的决策,并在每个用户实时合并所需的JavaScript。您无需关心任何事情。JavaScript会完全自动加载。酷吧?😎
而且,不用担心性能。所有JS都会为每个单独的访问者压缩和缓存。

从cookie中读取cookie标识符

如果您已经以其他方式包含您的JavaScript,则可以依赖Choice-Cookie的值。
它名为KD_GDPR_CC,包含您在配置时在后端定义的所有组和cookie的标识符。该cookie的有效负载可能看起来像这样

{
  "consents": {
    "default": [
      "necessary",
      "analytics",
      "marketing"
    ]
  },
  "consentDate": "Tue, 11 Feb 2020 11:35:23 GMT",
  "expireDate": "Wed, 10 Feb 2021 23:00:00 GMT"
}

如果您已配置按维度同意,则"consents"中有每个维度的条目,而不是默认值。查看示例

所以只需检查consents并加载所需的JavaScript。
专业提示:如果您使用Google Tag Manager添加您的JS标签,您可以定义一个自定义的First-Party-Cookie类型的数据层变量,它可以在触发器内部用作条件。

Google Tag Manager集成

CookieConsent和Google的Tag-Manager之间有两种交互方式。还支持新的"Consent Mode"。我们在这里提供了完整的指南。您也可以在替代Tag-Managers中使用"旧"方法(也在上面的链接中描述)。

添加重新打开链接

要创建一个用于重新打开横幅的链接,您只需放置一个目标为#GDPR-CC-open-settings的链接即可

<a href="#GDPR-CC-open-settings">Cookie-Settings</a>

点击此类链接后,cookie横幅将通过API加载。将使用旧设置作为预设。

自定义cookie名称

在某些用例中,可能需要更改配置cookie的名称。这可以通过使用以下设置轻松实现

KaufmannDigital:
  GDPR:
    CookieConsent:
      cookieName: 'CUSTOM_COOKIENAME'

cookie生存期

出于GDPR(DSGVO)原因,可能需要将设置cookie(包含CookieConsent设置)的过期时间缩短。这可以通过Settings.yaml中的天数进行配置

KaufmannDigital:
  GDPR:
    CookieConsent:
      cookieLifetime: 365 #365 days

版本控制

在某些情况下,可能需要向已经给出同意的人展示cookie横幅。例如,如果添加了新的cookie。
为此,您只需编辑版本日期。您可以在cookie设置的NodeType检查器中找到它
version-date setting

更改日期后,横幅将再次对所有在更改日期之前提交cookie横幅的访问者显示。将使用旧设置作为预设。

在时间后使用户决策无效

有时有必要或有益于提醒用户他们的决策并要求他们再次确认。为此,可以在后端设置决策的TTL。
decision-time setting
单位是秒。在设置的时间过期后,横幅将再次出现,并带有上次决策的默认设置,因此用户只需单击一下即可轻松接受旧决策。
0(默认值)将禁用横幅的重复显示。

样式

自定义横幅样式

横幅包含默认样式,旨在符合GDPR和可访问性要求。

您可以通过以下方式自定义横幅:

  1. 通过检查器中的输入字段设置主题颜色(按钮)、背景颜色、文本颜色和横幅的最大宽度。
  2. 创建一个包含您自己的样式的CSS文件,并使用Settings.yaml包含它
KaufmannDigital:
  GDPR:
    CookieConsent:
      customCSSFilepath: 'resource://Vendor.Package/Private/Styles/cookie-consent.css' #You can also use the public-path, of course

为了了解CSS样式和类名,您可以查看我们的SCSS文件:点击查看

在您的自定义文件中,不需要写出所有的选择器,只需覆盖相关的自定义属性即可。以下示例文件展示了可以使用的自定义属性

.gdpr-cookieconsent-container {
    --cookieconsent-theme-color: rgb(0 137 203);
    --cookieconsent-overlay-color: rgb(0 0 0 / .75);
    --cookieconsent-bg-color: rgb(255 255 255 / 0.95);

    --cookieconsent-group-bg-color: rgb(255 255 255);

    --cookieconsent-button-text-color: rgb(255 255 255);
    --cookieconsent-button-primary-color: var(--cookieconsent-theme-color);
    --cookieconsent-button-secondary-color: rgb(255 255 255);
    --cookieconsent-button-primary-text-color: var(--cookieconsent-button-text-color);
    --cookieconsent-button-secondary-text-color: rgb(0 0 0);
    --cookieconsent-button-borderradius: 4px;

    --cookieconsent-spacing: 1rem;
    --cookieconsent-width: 1200px;

    --cookieconsent-focus-outline: black solid 2px;
    --cookieconsent-focus-outline-offset: 2px;
}

/* Switches options */
.gdpr-cookieconsent-switch {
    --cookieconsent-switch-thumb-size: 1.5rem;
    --cookieconsent-switch-thumb-color: rgb(255 255 255);
    --cookieconsent-switch-thumb-highlight-color: rgba(0 0 0 / 0.25);
    --cookieconsent-switch-length: calc(var(--cookieconsent-switch-thumb-size) * 2);
    --cookieconsent-switch-padding: 4px;
    --cookieconsent-switch-inactive-color: rgb(204 204 204);
    --cookieconsent-switch-active-color: var(--cookieconsent-theme-color);
    --cookieconsent-switch-thumb-size-small: 1rem;
    --cookieconsent-switch-outline: var(--cookieconsent-focus-outline);
    --cookieconsent-switch-outline-offset: var(--cookieconsent-focus-outline-offset);
}

⚠️ 请注意,在检查器中设置的颜色将覆盖自定义CSS文件中的值。您可能需要先在检查器中取消设置颜色值。

在横幅中使用您自己的融合组件

有时调整CSS并不够,您可能只想在横幅中使用自己的按钮或文本组件。好消息是:您可以通过覆盖以下组件的renderer来实现

  • KaufmannDigital.GDPR.CookieConsent:Component.Atom.AcceptAllButton
  • KaufmannDigital.GDPR.CookieConsent:Component.Atom.SaveButton
  • KaufmannDigital.GDPR.CookieConsent:Component.Atom.AcceptNecessaryButton
  • KaufmannDigital.GDPR.CookieConsent:Component.Atom.OpenIndividualSettingsButton
  • KaufmannDigital.GDPR.CookieConsent:Component.Atom.CloseIndividualSettingsButton
  • KaufmannDigital.GDPR.CookieConsent:Component.Atom.Headline
  • KaufmannDigital.GDPR.CookieConsent:Component.Atom.Text

访问按钮标签就像访问${props.label}一样简单。

以下是一个如何使用您自己的按钮作为“接受所有”按钮的示例

prototype(KaufmannDigital.GDPR.CookieConsent:Component.Atom.AcceptAllButton) {
    renderer = Vendor.Site:Component.PrimaryButton {
        myLabel = ${props.label}
    }
}

限制CORS头部到特定域名

如果您在多个域名上使用cookie横幅,您可以限制CORS头部到特定域名。如果您想在多个域名上使用相同的cookie横幅,但又不想允许所有域名访问cookie横幅API,这将非常有用。要仅允许从特定域名访问cookie横幅API,您可以在设置中配置允许的域名

KaufmannDigital:
  GDPR:
    CookieConsent:
      allowedOrigins:
        - 'subdomain.example.com'
        - 'example.org'

路线图/计划功能

  • 流行cookie的预设。例如
    • Google Analytics
    • Matomo (Piwik)
    • Intercom支持聊天
    • ...

赞助商

我们想感谢我们的赞助商,他们在开发过程中给予了我们财务支持

Mittwald Logo

您在我们解决方案中缺少功能吗?您想支持此包的开发?请随时联系我们!
邮箱:support@kaufmann.digital

维护者

此包由Neos Agency Kaufmann Digital维护。
请随时发送您的问题或请求至support@kaufmann.digital

问题和Pull-Requests都欢迎!

在安装或配置过程中遇到困难?缺少某些东西?发现了错误?
没问题,只需创建一个问题或打开一个pull request。我们会尽快查看。

许可证

许可协议为GPL-3,请参阅LICENSE