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}