WebHead aneb generování hlačky HTML s kompilerem v novém
- enlilcz
- Člen | 7
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‘}