create component a sablony
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- xr
- Člen | 94
zdravim dobre duse a nette guru-ov :)
mam takyto kod
public function createComponentCatmenu($name) {
if (is_null($this->catMenu))
$this->catMenu = '';//createCatMenu();
$template = new \Nette\Templates\Template(__DIR__.'/../templates/catmenu.phtml');
$template->registerFilter(new \Nette\Templates\LatteFilter());
$template->test= 'test';
$template->render();
}
v sablone mam
{control catmenu}
funkcia sa zavola, ked dam za $template->render
prikaz
exit;
, vsetko funguje … teda akoze $template sa vyrenderuje a
program skonci. ale ked nie, tak dostavam krasnu hlasku
InvalidArgumentException
Component with name 'catmenu' does not exist.
chapem, ze ked mam nieco ako $form = new AppForm;
tak pouzijem
return $form;
a som v suchu. ale co mam vratit v mojom pripade?
da sa to vobec? dik za napady
- Panda
- Člen | 569
Nedá, systém továrniček předpokládá, že budeš vytvářet objekt,
který dědí od Component
(resp. Control
, pokud se
jedná o vykreslitelnou komponentu). Až na tom objektu se volá metoda render,
která má vykreslit šablonu.
Napsal bych to nějak takto:
Soubor CatMenu.php
:
<?php
class CatMenu extends \Nette\Application\Control
{
public function render()
{
// šablonu není potřeba ručně vytvářet
$this->template->setFile(__DIR__ . '/catmenu.phtml');
$this->template->test = 'test';
// ...
$this->template->render();
}
}
A továrna:
protected function createComponentCatmenu()
{
$menu = new CatMenu();
// na tomto místě by se od komponenty vkládala data
return $menu;
}