Přidání třídy k formuláři

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

Ahojte, vytvářím jakési administrační rozhraní – mám několik objektů jako např. uživatel, sklad, dodavatel, … Všechno jsou to jen nějaké záznamy v databázi. Pro přidání nového záznamu a editaci aktuálního záznamu používám relativně jednoduchých formulářů. Všechny tyto formuláře by měly vypadat stejně, takže by nebylo správné vypisovat si je „ručně“ v .latte souborech. Mám ale šablony stylů a html, takže je téměř nemohu přizpůsobit html, který generuje DefaultFormRenderer. Podle návodu Forms se tedy snažím upravit $renderer->wrappers a docílit tak požadavků. Bohužel jsem ale skončil hned u prvního, a to je nastavení html třídy formuláře. Obávám se, že stejně tak dopadnu u nastavení třídy labelu, inputu i descriptionu.
No… potřeboval bych dosáhnout této struktury:

trida formulare:
form-horizontal (tedy <form class="form-horizontal"...)

radek (label, input a hint):
<div class="control-group">
  <label class="control-label">Small Input</label>
  <div class="controls">
    <input type="text" placeholder="small" class="m-wrap small">
    <span class="help-inline">Some hint here</span>
  </div>
</div>

tlacitka pro odeslani a cancel:
<div class="form-actions">
  <button type="submit" class="btn blue"><i class="icon-ok"></i> Save</button>
  <button type="button" class="btn">Cancel</button>
</div>

Teď tedy dotazy:

  1. Jak nastavím třídu „form-horizontal“ formuláři?
  2. Řádek, tedy „pair“ nastavím na div, ale jak mu přidám třídu „control-group“?
  3. Opět třída labelu?
  4. Container „div“ inputu („control“) nastavím na div, ale opět nastavení třídy?
  5. U inputu bych mohl pro typ „text“ nastavit třídu pomocí wrappers['control']['.text'], ale placeholder?
  6. Opět třída nápovědy („description“)?
  7. Submit a cancel bych teoreticky mohl dát do skupiny a skupinu pak obalit divem, ale opět nevím, jak pak přidat třídu „form-actions“?

atd.

Omlouvám se za tak dlouhý dotaz, snad je jasné, na co se ptám.
Mockrát všem děkuji :-).

s4muel
Člen | 92
+
+2
-

trieda formularu:

$form->elementPrototype->addAttributes(array('class' => 'form-horizontal'));

nastavenie tried pre oblasti

$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = 'div';
$renderer->wrappers['pair']['container'] = "div class='control-group'";
$renderer->wrappers['label']['container'] = "label class='control-label'";
$renderer->wrappers['control']['container'] = "div class='controls'";

nastavenie triedy pre button

$form->addSubmit('save', 'Save')->setAttribute('class', 'btn btn-blue');

nastavenie placeholderu pre input asi podobne

$form->addText('foo', 'Foo:')->setAttribute('placeholder', 'placeholder_text');

ps: ak niekto pozna lepsie, rad sa priucim tiez.

Jan Mikeš
Člen | 771
+
+2
-

Muzes pouzit twitter bootstrap renderer, funguje bajecne,

nebo si muzes vytvorit vlastni sablonu formRenderer.latte kterou pak budes pouzivat v sablone takto:

	{form someForm}
		{include '../folder/formRenderer.latte', form=>$form}
	{/form}

Nebo pak dalsi moznost si muzes vytvorit tridu BaseForm kterou budou vsechny tve formulare dedit a nadefinovat si renderovani primo v PHP

svezij
Člen | 69
+
0
-

Ahoj, oběma moc díky, využil jsem rady s4muela a ještě bych doplnil, že nastavení třídy pro tlačítka a submity jde takto:

$renderer->wrappers['control']['.submit'] =
$renderer->wrappers['control']['.button'] = 'btn btn-blue';

případně kombinace s radou:

$renderer->wrappers['control']['.submit'] =
$renderer->wrappers['control']['.button'] = 'btn';

// a pak např.
$form->addSubmit('create', 'Uložit')
     ->setAttribute('class', 'btn-blue');  // k třídě btn se přidá navíc btn-blue
$form->addSubmit('create', 'Použít');      // zůstane jen třída btn
$form->addButton('cancel', 'Zrušit');

Děkuji :-)