Souhlas s Cookies

Rudolf Svátek 2016-08-03 15:11

Tohle je zase výmysl! Pode EU musíš na svém webu uvést, že používáš cookies. Jestli máš třeba jen vložený měřící kód Google Analytics, tak je teda používáš. Musíš si vyžádat od uživatele souhlas s jejich užitím a také mu dovolit ten souhlas odvolat. Platí to už nějaký ten rok. Je to celkem vopruz, tak ti ukážu, jak to řeším na svém webu já.

Řeším to pomocí komponenty:

<?php

namespace App\FrontModule\Controls;

use Nette\Application\UI;

use Nette\Http\IRequest;
use Nette\DI\Container;

class EuCookiesControl extends UI\Control
{

	/** @var IRequest */
	private $httpRequest;

	/** @var Container */
	private $container;

	/**
	 * EuCookiesControl constructor.
	 * @param Container $container
	 */
	public function __construct(Container $container) {
		parent::__construct();
		$this->container = $container;
		$this->httpRequest = $this->container->getByType('Nette\Http\Request');
	}

	/**
	 *
	 */
	public function render() {
		$this->getTemplate()->eucookies = $this->httpRequest->getCookie('eu-cookies');
		$this->getTemplate()->setFile(__DIR__ . '/EuCookiesControl.latte');
		$this->getTemplate()->render();
	}

}

Její šablona je celkem jednoduchá:

<div id="eu-cookies" n:if="!$eucookies">
	Tento web použ&iacute;v&aacute; soubory cookie. Použ&iacute;v&aacute;n&iacute;m tohoto webu s t&iacute;m souhlas&iacute;te.
	<button class="btn btn-success btn-xs" type="button">V poř&aacute;dku</button> 
	<a class="btn btn-info btn-xs" href="/prohlaseni-o-pouzivani-cookies">Dal&scaron;&iacute; informace</a>
</div>
<noscript><style>.eu-cookies { display:none }</style></noscript>

V BasePresenteru (kde jinde, když se to má aplikovat na celém webu) jsem přidal vytvoření komponenty:

	/**
	 * @return EuCookiesControl
	 */
	protected function createComponentEuCookiesControl() {
		return new EuCookiesControl($this->container);
	}

Asi jsi postřehl, že komponentě předávám parametr $this->container. To je kvůli práci se sessions. Je to celý systémový kontejner. Abych se k němu dostal, upravil jsem v BasePresenteru konstruktor:

	/** @var Container */
	protected $container;

	public function __construct(Container $container) {
		parent::__construct();
		$this->container = $container;
	}

Dál potřebujem javascript, který po kliknutí na souhlas uloží do Cookies poznámku o souhlasu a vypne zobrazení oznámení:

$('.eu-cookies button').click(function() {
    var date = new Date();
    date.setFullYear(date.getFullYear() + 10);
    document.cookie = 'eu-cookies=1; path=/; expires=' + date.toGMTString();
    $('.eu-cookies').hide();
});

Je dobré tu oznamovací větu zobrazit tak, aby ji uživatel sice viděl celou dobu, kdy prochází web, ale aby moc nerušila. Stačí si jí trochu nastylovat:

#eu-cookies {
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    color: white;
    background-color: black;
    z-index: 1000;
	text-align: center;	
}

#eu-cookies a {
    color: white;
	font-size: 12px;
}

Posledním krokem je umístění komponenty v hlavní šabloně:

{control euCookiesControl}

Sluší se říct, že bys před odsouhlasením neměl ani vkládat měřící kód Google Analytics. Čili si třeba uprav šablonu a dej tam nějakou podmínku na zobrazení, podle toho, jestli v Cookies už souhlas je, nebo ne.

A tohle je poslední díl seriálu. Snad ses bavil tak dobře jako já.

Redakční systém RS::RS Předchozí kapitola

Mapa stránek a rss

Redakční systém RS::RS Celý seriál

Vývoj redakčního systému v PHP

 

Komentáře (2)

  • Rudolf Svátek 2017-03-28 15:10:45
    Díky za postřehy a sorry za pozdní reakci. Mám toho teď fůru, tak nestíhám.
  • Jan Galek 2017-03-10 14:40:20
    Chci se zeptat, proč do controlu posíláš celý container místo čistě httpRequestu ? A ještě jsem našel chbku, u js používáš třídy, ale div má id ;) $('#eu-cookies button').click(function() { var date = new Date(); date.setFullYear(date.getFullYear() + 10); document.cookie = 'eu-cookies=1; path=/; expires=' + date.toGMTString(); $('#eu-cookies').hide(); });
Přidej svůj komentář

O mně

Jmenuji se Rudolf Svátek. Jsem lektor výpočetní techniky a PHP programátor. Stavím firemní stránky a eshopy. Aby se mi to dělalo pohodlně, vytvořil jsem redakční systém RS::RS, který ti tu nabízím k použití.

Rychlý kontakt na mně

  • Rudolf Svátek
  • Telefon:
    +420 777 828 353
  • Email:
  • Adresa:
    Josefa Hory 1097/5
    736 01 Havířov
    ČR



Tyto stránky používají Cookies. Používáním stránek s tím souhlasíte Další informace