Načtení controlů ze seznamu

- Jirda
 - Člen | 103
 
Zdravím,
rád bych se zeptal, jak lze dynamicky vypisovat controly do šablony. Zkoušel jsem:
<?php
        // vytvoreni controlu
	$this->addComponent(new Komponenta("prvni komponenta"), 'komponentaA');
        $this->addComponent(new Komponenta("druha komponenta"), 'komponentaB');
	// jejich nazvy do pole
	$this->template->controls = array("komponentaA, komponentaB");
?>
a v šabloně mám:
        {foreach $controls as $control}
            {control $control}
        {/foreach}
No a celé mi to vyhodí Fatal Error – Call to a member function getWidget() on a non-object
K té konstrukci výše mě přivedl tenhle můj experiment:
<?php
	$this->addComponent(new Komponenta("prvni komponenta"), 'komponentaA');
	$this->template->name = "komponentaA");
?>
a v šabloně:
        {control $name}
což funguje bez problémů.
Nenapadá někoho, jak případně obejít tento problém nebo kde dělám
chybu?
Jinak používám Nette 2.0-dev.
Předem děkuji za komenty.

- Jirda
 - Člen | 103
 
Díky. ¨
Jeětě bych tu rád otevřel jednu otázku, šla by podobná konstrukce aplikovat na blocky?
Řekněme, že bych měl pole polí, kde by klíčem byl označen název bloku a value jako pole by obsahovalo názvy komponent. No a pak by se v šabloně vygenerovaly blocky s názvy podle key a do blocku by se pak nagenerovaly controly.
Snad je to pochopitelné. Kdyžtak bych to více rozepsal.

- Filip Procházka
 - Moderator | 4668
 
Imho je lepší vrátit přímo ty komponenty šabloně, přece jenom, jsou to jen ukazatele.
// druhy parametr je nazev třídy
// tato metoda vyfiltruje komponenty a vrátí pouze instanci dané třídy/interface
$this->template->components = $this->getComponents(FALSE, 'Komponenta');
a pak je jednoduše vypsat
{foreach $components as $component}
	{control $component}
{/foreach}