WebHead aneb generování hlačky HTML s kompilerem v novém

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

Protože od vydání HeaderControlu a Webloadu už uplynulo hodně vody
a komponentu na zpracování hlavičky html potřebuji téměř v každé aplikaci,
včetně preprocessingu js nebo css, pokusil jsem se napsat vlastní komponentu, nazvanou webHead.

Základní settery pochází z Header Controlu (s laskovým svolením autora), nicméně jsem zcela přepracoval rendering
a přidal podporu pro preprocessing js a css souborů.

Dopsal jsem CompilerExtension, aby se vše dalo snadno konfigurovat v config.neon,
navíc Extension i automaticky zaregistruje Latte makro, takže to máte skoro bez práce.

Vše co se dá zkonfigurovat přes config, můžete dosáhnout i přes settery v továrničce nebo
dokonce i přímo v šabloně.

Makra komponenty zahrnují mj. i makra css a js, které umí KDEKOLIV v šabloně (a to i ve vnořených)
vložit css nebo js soubor a ten se objeví tam, kde má, tedy v hlavičce. Viz examples.

V repozitáři je také sandbox Nette, kde si vše můžete vyzkoušet.

Řešení samozřejmě nepovažuji zdaleka za dokonalé a jsem otevřen diskusi.

Link na repo: https://github.com/enlilcz/webHead
Twitter: @AdamBisek

Registrace

do bootstrap.php vložte řádek:

<?php
	WebHead\CompilerExtension::install($configurator);
?>

Konfigurace

1. config.neon
<?php
	webHead:
		control:
			title: My webpage title
			author: John Doe

		compiler:
			outputDir: %wwwDir%/myDir
			wwwPath: /myDir
			filters:
				- WebHead\Filters\CssMinifier

		js: [file.js] # these files will be compiled

		css: [screen.css] # these files will be compiled
?>
2. přes továrničku v presenteru
<?php
	public function createComponentWebHead()
	{
		$control = new \WebHead\Control($this->context->httpResponse);
		$compiler = $control->getFiltersCompiler();
		$compiler->registerFilter(new \WebHead\Filters\CssMinifier);
		$compiler->setOutputDir(WWW_DIR . '/temp', $this->template->basePath . '/temp'); // directory to compile files
		$compiler->addFiles(Nette\Utils\Finder::findFiles("*")->from(WWW_DIR . '/css')); // these files will be compiled
		return $control;
	}
?>
3. v šabloně

{webHead:setTitle ‚Website title‘}
{webHead:addTitle ‚Page title‘}
{webHead:addKeywords ‚keyword‘}
{css ‚screen.css‘}
{js ‚script.js‘}