Generovani komponenty pomoci vlastni syntaxe v texy
- Saska
- Člen | 23
Narazil jsem na problem s vytvarenim komponenty uvnitr zpracovani vlastni syntaxe texy. Kdyz zavolam $anketa->render(), tak mi to nevrati text, ale jenom ho vypise na obrazovku(to zpusobi, ze jelikoz toto s provede pred zobrazenim vysledku, tak se ten kod vygenerovany komponentou zobrazi na zacatek namisto pozadovanyho mista(podle textu)).
public function userAnketaHandler($parser, $matches, $name)
{
...
$anketa = $this['anketa'];
return $anketa->render();
...
}
V komponente se v metode render vykresluje text pomoci
public function render()
{
...
$this->template->render();
}
Napadaji mne dve potencionalni reseni, ale ani jedno nejsem schopny napsat v nette.
- Dosahnout toho, aby funkce render v komponente vracela text(pak by to ale nemuselo byt koser vuci volani v sablone pomoci widged))
- Funkce userAnketaHandler by vracela jenom jakysi callback, ktery by se zavolal az pri vypisovani.
- Honza Kuchař
- Člen | 1662
Nějak nechápu proč je v userAnketaHandler() volá render()? To se přece zavolá v šablone na tom požadovaném místě.
- Saska
- Člen | 23
ono to je tak, ze kdyz narazi parser texy na danou sekvenci(mam vlastni syntaxy zapisu), ktera vyznacuje zapsani ankety, tak se provede ten userAnketaHandler(), ktery to zpracuje a vrati pozadovany kod a ja pak potrebuju dostat html vystup ty komponenty. Jenze jak uz jsem zminoval nahore, tato funkce se provadi predem a vypisovani probiha pak az naraz se to cely vypise
- Honza Marek
- Člen | 1664
Saska napsal(a):
- Dosahnout toho, aby funkce render v komponente vracela text(pak by to ale nemuselo byt koser vuci volani v sablone pomoci widged))
Co když budeš mít ještě jednu metodu, která bude vracet string místo vyrenderování?
// magická metoda __toString
public function __toString() {
...
return (string) $this->template;
}
public function render() {
echo (string) $this;
}
- Milanov
- Člen | 51
Zdravím. Mám zřejmě podobný příklad jako Saska. V renderované komponentě ale opět využívám Texy filtr šablony. V tomto momentě se má provést zpracování pomocí Texy v bloku, který je zpracováván pomocí Texy a vyhodí se vyjímka, že Texy již běží. Lze problém vyřešit jinak, než vytvožením nové instance Texy? Díky za rady