This plugin will help you comply with EU Cookie law. As that law states, all European visitors of your site should not only be made aware of, but also consent to the cookies your site sets. This plugin will help you obtain consent for one or more cookie groups.
This plugin requires a commercial license which can be purchased through the Craft Plugin Store.
The license fee is $29 plus $9 per subsequent year for updates (optional).
This plugin requires Craft CMS 3.0.0 or later.
Installation
- Install with Composer via
composer require nilsenpaul/complete-cookie-consent
from your project directory - Install plugin in the Craft Control Panel under Settings > Plugins
- Alter the plugin's settings to cater to your site's needs
You can also install Complete Cookie Consent via the Plugin Store in the Craft Control Panel.
Using the plugin's settings page, you have total control over the appearance and functionality of your cookie consent banner:
- Activate and de-activate the banner from the plugin settings page
- Only show the banner for logged in admins, for testing purposes
- Change the colors of the banner and banner button
- Change the text of the banner title, banner text and button text
- Include the plugin's CSS to give your banner a base style, or use your own CSS
- Choose a position for the banner: top, right, bottom, left or center
- Change the name and expiration time for the preferences cookie
- Change cookie types, make cookie types required or checked by default
- Add geolocation to your cookie consent process by using an automatically downloaded GeoIpLite database, or by adding an ipApi API key: only show the banner to EU visitors
After you've installed the plugin, and activated the cookie consent banner, the banner will be shown on your site. Depending on your setup, an external geolocation API will be used to determine if a cookie banner is needed.
The Complete Cookie Consent plugin lets you choose between two consent modes: Implied and Explicit. With implied consent, the cookie banner will only be shown on every visitor's first page load. With explicit consent, the visitor will have to make a choice before the banner disappears.
This is NOT legal advice. It's hard to find out what rules apply to your website, especially because every European country has its own set of rules (or no rules or enforcement whatsoever). If you want to play safe, go for explicit consent. If you decide to go for implied consent, make sure you create a form on your site for visitors to change their preferences.
Cookie consent wouldn't be of much use if you wouldn't act upon the preferences of your users. That's why the ccc
JavaScript object is set, containing the preferences of the current visitor:
window.addEventListener('ccc.loaded', function(e) {
console.log(ccc.consentSubmitted)
# prints true or false. Only true if visitor submitted their preferences
console.log(ccc.consentImplied)
# prints true or false. True if consent mode is set to 'implied' and the visitor did not submit their own preferences
console.log(ccc.consent.[cookieTypeHandle])
# prints true or false, depending on your visitor's choice (or the default settings, if consent mode is 'implied')
});
You can use these values to load (or prevent loading of) whatever you want.
The plugin provides a template variable, to get the current visitor's consent info:
{% set consentInfo = craft.ccc.consentInfo %}
{{ consentInfo.consentSubmitted }}{# <-- true or false #}
{{ consentInfo.consent }}{# <-- An array with cookieType handles as keys, and consent status as value #}
{{ consentInfo.cookieTypes }}{# <-- An array containing cookie type config settings, indexed by handle #}
As of v1.0.1, it's possible to update consent preferences for a visitor with a form like this:
<form method="POST">
<input type="hidden" name="action" value="complete-cookie-consent/consent/submit" />
{{ csrfInput() }}
{% for consentType, consentStatus in craft.ccc.consentInfo.consent %}
<label for="cookieTypes[consentType]">
<input type="checkbox" name="cookieTypes[]" value="{{ consentType }}"{% if consentStatus == true %} checked{% endif %} /> {{ consentType }}
</label>
{% endfor %}
<input type="submit" value="Submit" />
</form>
- NYStudio107, for all the work you put in your plugins and the blog posts you write. Writing plugins is easier with your code as guidance.
- More JS examples, for example how to prevend Google Tag Manager from loading if consent is not given
- Simple statistics, to know how the cookie banner effects your site