solution to the EU Cookie Law
composer require dmstr/yii2-cookie-consent
yii config
'components' => [
'cookieConsentHelper' => [
'class' => dmstr\cookieconsent\components\CookieConsentHelper::class
]
]
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; ?>
{{ 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 %}
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 |
<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>
.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) ?>
Widgets throws an yii\base\InvalidConfigException
if you define an invalid cookie consent helper component