Nette 0.9 a HTML labely vo formulároch
- jardo
- Člen | 17
Ahojte
Pravdepodobne som narazil na BUG v Nette verzii 0.9 (skúšané na revízii 480). Vo výsledku sa vnútro labelu vôbec nezobrazí. Vo verzii 0.8 to fungovalo. Zmenilo sa niečo, alebo je to chybka ?
<?php
$label = NHtml::el()->setHtml('Nejaky <small>(HTML label)</small>:');
$form->addText('inputname', $label);
?>
- zaxeeq
- Člen | 17
Html::getHtml() obsahuje tohle:
final public function getHtml()
{
$s = '';
foreach ($this->children as $child) {
if (is_object($child)) return FALSE;
$s .= $child;
}
return $s;
}
a protože $child je v tomto případě objekt (konkrétně instance Html s nastaveným textem labelu) tak to skončí bez výsledku; tak nevím jestli je to chyba nebo feature :)
- Foowie
- Člen | 269
V ConventionalRenderer
u se při renderu
labelu (pokud je label html prvek) provádí
operace $label->setHtml($label->getHtml() . $suffix);
Na první pohled by to až zase tak nevadilo, ale problém je, že při Html::setHtml($html)
se provede i $this->removeChildren();
a
Html::getHtml()
vrátí FALSE
(jak výše zmínil
zaxeeq), což dokonale odstraní vámi vložený Nette\Web\Html
nadpis, který je jako „potomek“ v labelu =)
Fix na straně ConventionalRenderer
u by mohl být (snad)
nahrazení řádku
$label->setHtml($label->getHtml() . $suffix);
za $label->add($suffix);
Editoval Foowie (11. 9. 2009 19:13)
- Foowie
- Člen | 269
Prozkoumej podmínku, kdy se operace $label->setHtml($label->getHtml() . $suffix);
provádí a najdeš odpověď ;)
- hanakus
- Člen | 22
Nejspíš je to bug. Zvlášť když tohle řešení v jiném topicu radí sám David.
Navrhuji odstranění té zákeřné podmínky, je to přece na zodpovědnosti programátora jestli bude prasit html v presenteru, ne ? :-)