Potomek TextArea s vlastní šablonou?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Petr Daňa
Člen | 109
+
0
-

Zdravím, v práci se ve verzi 0.9.x používá pro rozšíření formulářových prvků taková obezlička, např. pro vytvoření „WikiArea“, tj. s tlačítky ovlivňujícími obsah TextArea:

<?php
class WikiArea extends TextArea
{
    public function getControl()
    {
        $control = parent::getControl();

        $template = new Template();
        $template->setFile(APP_DIR.'/templates/Components/'.get_class($this).'.phtml');

        $template->id = $control->id;
        $template->control = $control;
        $template->baseUri = Environment::getVariable('baseUri');

        return $template;
    }
}
?>

Podle mě je to nesmysl, getControl by měl vracet zase instanci Control (či potomka), a ne řetezec vygenerovaný ze šablony. Ve verzi 0.9 to kupodovu funguje, ale v 1.0 už ne, vrací to nezparsovanou šablonu, tj. zdroj phtml. Vím, že formulářové prvky jsou Componenty a ne Controly, tj. by neměly mít vlastní vykreslení, ale napadá vás, jak toto nějak provoznit i ve verzi 1.0?

arron
Člen | 464
+
0
-

Ono u tech formularu je to takove trochu osidne. Za normalnich okolnosti vraci metoda getControl instanci tridy Html. Ta se potom v ConventionalRendereru (v pripade, ze ho pouzivate) renderuje pretypovanim na string ((string) $control->getControl()). To by melo fungovat i v pripade template…Kdyz to nebezi, tak bych nejdriv zkusil vratit $template->__toString() a jestli se to nerozbehne, tak pak uz jenom nejaky debugging a sledovat, co presne se kde deje…

phx
Člen | 651
+
0
-

Nebo jako vysledek vratit:

return Html::el()->setHtml($template->__toString());