Nette\Web\Html request & ConventionalRen­derer request

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

Zdravím, docela by se mi hodila jakási funkce container pro Nette\Web\Html elementy, mohl bych tedy ve formulářích napsat

$wrappers["error"]["container"] = Html::el('div')->class('message error')->container('ul');

S tím, že by kód vypadal nějak takto:

<div class="message error">
	<ul>
		<li>Some error..</li>
	</ul>
</div>

(prostě by se vytvořil jakýsi podobal..)

.. A ještě bych měl dvě prosbičky k poli $wrappers u CR, přidat k labelu něco jako suffix, ale s tím rozdílem, že by se suffix přidal před </label>, a druhou, přidat suffix k controlu nebo pairu (občas potřebuju přidat odřádkování <br />)

romansklenar
Člen | 655
+
0
-

Ola napsal(a):

Zdravím, docela by se mi hodila jakási funkce container pro Nette\Web\Html elementy, mohl bych tedy ve formulářích napsat

$wrappers["error"]["container"] = Html::el('div')->class('message error')->container('ul');

S tím, že by kód vypadal nějak takto:

<div class="message error">
	<ul>
		<li>Some error..</li>
	</ul>
</div>

(prostě by se vytvořil jakýsi podobal..)

Co toto?

Html::el('div')->class('message error')->add(Html::el('ul'));

.. A ještě bych měl dvě prosbičky k poli $wrappers u CR, přidat k labelu něco jako suffix, ale s tím rozdílem, že by se suffix přidal před </label>, a druhou, přidat suffix k controlu nebo pairu (občas potřebuju přidat odřádkování <br />)

S tím labelem pokud jde jen o toto

popisek:
[ input ]

tak to jde jednoduše nastylovat přes css.

Odřádkování pairu už se řešilo jinde jednoduchou úpravou ConventionalRendereru a myslím, že se to dostalo i do Davidova veřejného todo tady na fóru, takže dočkej času ;)

Ola
Člen | 385
+
0
-

Ad. container: Nene, tohle vytvoří kód v tomto stylu:

<div class="message error">
	<ul></ul>
	<li>Some error here</li>
</div>

Ad. label: Ten label nastylovat jak? Myslíš přes :after? Já to myslel tak, že bych si do nějakýho [předsuffixu] dal dvojtečku, protože potřebuju mít jinou barvu textu mimo label a jinou v labelu..
Ad. pair: Aha, nebyl moc jistý jestli to tu je a radši sem to taky napsal (musel sem to rychle dopsat)..

Editoval Ola (11. 4. 2009 16:51)

romansklenar
Člen | 655
+
0
-

Aha, tak pak asi momentálně jedině zase úpravou vykreslovače nebo manuálním vykreslením v šabloně:

{$form->render('begin')}
<div class="message error">
{$form->render('errors')}
</div>
{$form->render('body')}
{$form->render('end')}

S tím labelem jsem tě asi špatně pochopil, myslel jsem, že jde jen o to, že chceš popisek a input pod sebou, ne vedle sebe, když jsi tam zmiňoval odřádkování.

span.pair input {
	display: block;
}

Celý ConventionalRendereru je šikovně napsaný a dají se s ním dělat psí kusy, takže tyhle věci si dopisuju, jen je pak třeba nezapomenout při vytváření formulářů ho formuláři i přiřadit

$form->setRenderer(new CustomRenderer);