Jak detekovat prostředí/režim v presenteru?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tori
Člen | 32
+
0
-

Dobré aprílové ráno.
Potřebovala bych nějakým způsobem dostat do šablony informaci, jestli web běží na localhostu (nebo ve vývojářském režimu) anebo ne. Je to kvůli vkládání měřicího kódu GA.
Všechno, co jsem tu našla, se týkalo jen bootstrapu a nevím, jak se v presenteru dostat ke $configurator. Třída Environment se zřejmě už dlouho nepoužívá, ale jak je to správně v Nette 2? Díky moc za radu / odkaz.

Michal Vyšinský
Člen | 608
+
0
-

Zdravím,
debug mode lze zjistit z parametrů:

$this->context->parameters["debugMode"]
Tori
Člen | 32
+
0
-

Super, díky.

thunderbuff
Člen | 164
+
0
-

použití $this->context není v nette 2 úplně správně. Podle filozofie dependency injection by to spíš měla obstarávat nějaká služba. Znamená to víc psaní. Dělá se to nějak takto:

v config.neon si zaregisruj novou službu:

common:
	services:
		GoogleAnalytics: GoogleAnalytics(%debugMode%)

Vytvoř si třídu služby:

<?php

class GoogleAnalytics extends \Nette\Object{

	private $debugMode;

	public function __construct($mode) {
		$this->debugMode = $mode;
	}

	public function getGACode() {
		if ($this->debugMode) {
			return false;
		}
		return "ga kod";
	}
}

?>

V presenteru vytvoříš:

<?php

	public function injectGA(\GoogleAnalytics $googleAnalytics) {
		$this->googleAnalytics = $googleAnalytics;
	}

	public function beforeRender() {
		$this->template->gaCode = $this->googleAnalytics->getGACode();
	}

?>

a v šabloně budeš mít přístupnou proměnnou $gaCode. Na produkci vypíše GA kod, na devu nic.

// EDIT:
také to lze takto:

<?php
$production = \Nette\Diagnostics\Debugger::$productionMode;

?>

Editoval thunderbuff (2. 4. 2013 13:31)

Michal Vyšinský
Člen | 608
+
0
-

Ano, vím, že to není úplně správně. Jen to bylo jediné jednoduché řešení, které mě zrovna napadlo. Nicméně tvé řešení přes inject do služby je samozřejmně lepší :)