Přidání třídy k formuláři
- svezij
- Člen | 69
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:
- Jak nastavím třídu „form-horizontal“ formuláři?
- Řádek, tedy „pair“ nastavím na div, ale jak mu přidám třídu „control-group“?
- Opět třída labelu?
- Container „div“ inputu („control“) nastavím na div, ale opět nastavení třídy?
- U inputu bych mohl pro typ „text“ nastavit třídu pomocí
wrappers['control']['.text']
, ale placeholder? - Opět třída nápovědy („description“)?
- 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
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
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
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 :-)