yii2-cookie-consent

solution to the EU Cookie Law

Getting started

Installation

composer require dmstr/yii2-cookie-consent

CookieConsentHelper Component

yii config

'components' => [
    'cookieConsentHelper' => [
        'class' => dmstr\cookieconsent\components\CookieConsentHelper::class
    ]
]

Usage with PHP

use dmstr\cookieconsent\widgets\CookieConsent;
<?= CookieConsent::widget([
    'name' => 'cookie_consent_status',
    'path' => '/',
    'domain' => '',
    'expiryDays' => 365,
    'message' => Yii::t('cookie-consent', 'We use cookies to ensure the proper functioning of our website. For an improved visit experience we use analysis products. These are used when you agree with "Statistics".'),
    'save' => Yii::t('cookie-consent', 'Save'),
    'acceptAll' => Yii::t('cookie-consent', 'Accept all'),
    'controlsOpen' => Yii::t('cookie-consent', 'Change'),
    'detailsOpen' => Yii::t('cookie-consent', 'Cookie Details'),
    'learnMore' => Yii::t('cookie-consent', 'Privacy statement'),
    'visibleControls' => true,
    'visibleDetails' => false,
    'link' => '#',
    'consent' => [
        'necessary' => [
            'label' => Yii::t('cookie-consent', 'Necessary'),
            'checked' => true,
            'disabled' => true
        ],
        'statistics' => [
            'label' => Yii::t('cookie-consent', 'Statistics'),
            'cookies' => [
                ['name' => '_ga'],
                ['name' => '_gat', 'domain' => '', 'path' => '/'],
                ['name' => '_gid', 'domain' => '', 'path' => '/']
            ],
            'details' => [
                [
                    'title' => Yii::t('cookie-consent', 'Google Analytics'),
                    'description' => Yii::t('cookie-consent', 'Create statistics data')

                ],
                [
                    'title' => Yii::t('cookie-consent', 'Goal'),
                    'description' => Yii::t('cookie-consent', '_ga, _gat, _gid, _gali')

                ]
            ]
        ]
    ]
]) ?>
<?php if (\Yii::$app->cookieConsentHelper->hasConsent('statistics')): ?>
    <!-- Google Analytics Script-->
<?php endif; ?>

Usage with TWIG

{{ use('dmstr/cookieconsent/widgets/CookieConsent') }}
{{ CookieConsent_widget({
    "name": "cookie_consent_status",
    "path": "/",
    "domain": "",
    "expiryDays": 365,
    "message": t("cookie-consent", "We use cookies to ensure the proper functioning of our website. For an improved visit experience we use analysis products. These are used when you agree with 'Statistics'."),
    "save": t("cookie-consent", "Save"),
    "acceptAll": t("cookie-consent", "Accept all"),
    "controlsOpen": t("cookie-consent", "Change"),
    "detailsOpen": t("cookie-consent", "Cookie Details"),
    "learnMore": t("cookie-consent", "Privacy statement"),
    "visibleControls": false,
    "visibleDetails": false,
    "link": "#",
    "consent": {
        "necessary": {
            "label": t("cookie-consent", "Necessary"),
            "checked": true,
            "disabled": true
        },
        "statistics": {
            "label": t("cookie-consent", "Statistics"),
            "cookies": [
                {"name": "_ga", "domain": "", "path": "/"},
                {"name": "_gat", "domain": "", "path": "/"},
                {"name": "_gid", "domain": "", "path": "/"},
                {"name": "_gali", "domain": "", "path": "/"}
            ],
            "details": [
                {
                    "title": t("cookie-consent", "Google Analytics"),
                    "description": t("cookie-consent", "Create statistics data")
                },
                {
                    "title": t("cookie-consent", "Goal"),
                    "description": t("cookie-consent", "_ga, _gat, _gid, _gali")
                
                }
            ]
        }
    }
}) }}
{% if app.cookieConsentHelper.hasConsent('statistics') %}
    {# Google Analytics Code #}
{% endif %}

Options

option description default type
name Defines the cookie name that Cookie Consent will use to store the status of the consent. Default is cookie conset helper's cookie name "" STRING
path Defines the cookie path "/" STRING
domain Defines the cookie domain "" STRING
expiryDays Defines the cookie exipration days 365 INT
message The message in the popup "This website uses cookies to ensure you get the best experience on our website." STRING
save The save button text "Save" STRING
acceptAll The accept all button text "Accept all" STRING
controlsOpen The open controls button text "Change" STRING
detailsOpen The open details button text "Details" STRING
learnMore The link text "More info" STRING
visibleControls If the controls panel should start open false BOOLEAN
visibleDetails If the details panel should start open false BOOLEAN
link The link pointing to your privacy policy page "#" STRING
consent A configuration array that will tell the cookie consent what it should do. Keys are the consent values that will be stored in the consent cookie. Labels are the checkbos labes. If no label is set the key will be used instead. The cookies array are a list of cookies names that can be deleted (when possible) when the corresponding consent value is revoked. See the above example "Usage with PHP". Also is possible to start the checkbox checked or disabled [] ARRAY

Toggle popup, controls and details

<button class="cookie-consent-open">open</button>
<button class="cookie-consent-close">close</button>
<button class="cookie-consent-toggle">toggle</button>
<button class="cookie-consent-controls-open">Open controls</button>
<button class="cookie-consent-controls-close">Close controls</button>
<button class="cookie-consent-controls-toggle">Toggle controls</button>
<button class="cookie-consent-details-open">Open Details</button>
<button class="cookie-consent-details-close">Close Details</button>
<button class="cookie-consent-details-toggle">Toggle details</button>

CSS Example

.cookie-consent-popup {
    animation-name: show;
    animation-duration: 1s;
    animation-timing-function: ease;
    display: none;
    position: fixed;
    bottom: 0;
    left: 0;
    width: 100%;
    z-index: 999999;
}

.cookie-consent-popup.open {
    display: block;
    opacity: 1;
    animation-name: show;
    animation-duration: 1s;
    animation-timing-function: ease;
}

.cookie-consent-controls {
    max-height: 0;
    overflow: hidden;
    -webkit-transition: max-height 0.5s ease-out;
    -moz-transition: max-height 0.5s ease-out;
    transition: max-height 0.5s ease-out;
}

.cookie-consent-controls.open {
    margin: 0 0 30px 0;
    max-height: 600px;
}

.cookie-consent-details {
    max-height: 0;
    overflow: hidden;
    -webkit-transition: max-height 0.5s ease-out;
    -moz-transition: max-height 0.5s ease-out;
    transition: max-height 0.5s ease-out;
}

.cookie-consent-details.open {
    max-height: 600px;
}

@keyframes show {
    from {opacity: 0;}
    to {opacity: 1;}
}

@keyframes hide {
    from {opacity: 1;}
    to {opacity: 0;}
}

Settings config example phemellc/yii2-settings

  • section: cookie-consent
  • key: config
  • type: object
{
  "name": "cookie_consent_status",
  "path": "/",
  "domain": "",
  "expiryDays": 365,
  "message": "We use cookies to ensure the proper functioning of our website. For an improved visit experience we use analysis products. These are used when you agree with 'Statistics'.",
  "save": "Speichern",
  "learnMore": "Datenschutzerklärung",
  "link": "#",
  "consent": {
    "necessary": {
        "label": "Necessary",
        "checked": true,
        "disabled": true
    },
    "statistics": {
      "label": "Statistics",
      "cookies": [
        {
          "name": "_ga"
        },
        {
          "name": "_gat",
          "domain": "",
          "path": "/"
        },
        {
          "name": "_gid",
          "domain": "",
          "path": "/"
        }
      ]
    },
    "0": "marketing",
    "1": "external-media"
  }
}
<?php
    $config = Yii::$app->settings->get('config', 'cookie-consent', []);
    $config = isset($config->scalar) ? $config->scalar : '{}';
    $config = json_decode($config, true);
?>

<?= CookieConsent::widget($config) ?>

Worth knowing

Widgets throws an yii\base\InvalidConfigException if you define an invalid cookie consent helper component