Vlastny ITemplate / SqlTemplate
- lupo112
- Člen | 11
Zdravim,
uz dlhsiu dobu sa snazim vytvorit objekt, ktory by vyuzival ako zdroj dat sablon
databazu, teda nejaky SqlTemplate
. Problem vsak neni v tvorbe
samotneho objektu, ale v jeho implementovani do presenteru. Ked uz je funkcia
createTemplate($class)
, preco sa parameter $class
neda
niekde rozumne nastavit?
A navyse pre famotnu funkcnost je nutne upravit aj kopu funkcii presenteru,
inak nefunguju layouty a includy. Alebo som na nieco pozabudol? Tu je moje
riesenie, skusi mi niekto poradit ako to urobit jednoduchsie? A to nevravim
o tom ze SqlTemplate
musi implementovat interface
IFileTemplate
, i ked so subormi nema nic spolocne. Nestalo by toto
sa upravu a nejake zjednodusenie uz vo frameworku?
Tu je moje riesenie implementacie:
// BasePresenter
// ...
protected function createTemplate($class = NULL) {
$template = parent::createTemplate('\\System\\Templating\\SqlTemplate');
// pripadne nastavenie objektu
return $template;
}
public function sendTemplate() {
$template = $this->getTemplate();
if (!$template) return;
// to je jedno ako si oznacim templaty v databaze, tu je napr. Admin:Home:default
$template->setFile($this->name . ':' . $this->action);
$this->sendResponse(new \Nette\Application\Responses\TextResponse($template));
}
public function findLayoutTemplateFile() {
// pokial druhy znak neni ':' tak hadze error ze subor neexistuje, WTF?
return '::' . $this->layout . '@layout';
}
// ...
Editoval lupo112 (23. 1. 2012 23:48)
- David Grudl
- Nette Core | 8218
Pokud by se toho někdo ujmul a zpracoval refactoring šablon do nějakého RFC, bylo by to fajn.