Odstránenie label vo formulári
- Lkopo
- Člen | 65
Zdravím,
mám menší problém s odstranením tagu label
z vygenerovaného formulára. Ponechaním prázdneho atribútu pre label sa
tento problém nevyrieši a tag label sa vo formulári objaví (samozrejme
prázdny). Nepodarilo sa mi nájsť v dokumentácii ani pri prezeraní fóra
riešenie k tomuto problému, resp. samotný podobný problém. Toho tagu sa
potrebujem zbaviť z dôvodu, že mi to „rozbíja“ design a namiesto
labelov používam na danej podstránke placeholders.
K renderovaniu formulárov používam nasledujúci kód, ktorý som jemne poupravil ako to je v dokumentácii:
$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = NULL;
$renderer->wrappers['pair']['container'] = 'div class=form-group';
$renderer->wrappers['pair']['.error'] = 'has-error';
$renderer->wrappers['label']['container'] = 'div class="control-label"';
$renderer->wrappers['control']['description'] = 'span class=help-block';
$renderer->wrappers['control']['errorcontainer'] = 'span class=help-block';
// make form and controls compatible with Twitter Bootstrap
//$form->getElementPrototype()->class('form-horizontal');
foreach ($form->getControls() as $control) {
if ($control instanceof Controls\Button) {
$control->getControlPrototype()->addClass('btn');
} elseif ($control instanceof Controls\TextBase || $control instanceof Controls\SelectBox || $control instanceof Controls\MultiSelectBox) {
$control->getControlPrototype()->addClass('form-control');
} elseif ($control instanceof Controls\Checkbox || $control instanceof Controls\CheckboxList) {
$control->getSeparatorPrototype()->setName('div')->addClass($control->getControlPrototype()->type);
} elseif ($control instanceof Controls\RadioList) {
$control->getSeparatorPrototype()->setName('div')->addClass('checkbox-inline');
}
}
return $form;
Jediným riešením mám zatiaľ to, že si ten formulár vykreslím ručne a
použujem makro n:name
ako to je v dokumentácii. Avšak v tomto
prípade, nedokážem pri chybe validácie dosiahnúť výsledok, že sa do
daného inputu vloží trieda has-error
a následne sa pod ním
vypíše chybová hláška ako sa to vykoná automaticky pri vygenerovanom
formulári (v dokumentácii som našiel len výpis chýb za sebou).
Vopred vďaka za rady.
- David Matějka
- Moderator | 6445
prvne poznamka: pouzivani pouze placeholderu neni z hlediska UX idealni. pokud si uzivatel chce overit, ze zapisuje do spravneho pole, tak mu nezbyva, nez to smazat.
a k dotazu: zkusil bych mozna
$control->getLabelPrototype()->setName(NULL)
a u manualniho renderovani – jestli ma input error zjistis pres
$form['name']->hasErrors()
(na zaklade toho muzes pridat tridu)
a pro ziskani erroru metody getError, resp getErrors. pripadne rovnou
makro {inputError name}
- Lkopo
- Člen | 65
Ďakujem za tú poznámku. Uznávam, v bežných formulároch si labels ponechávam, ale pri logine je to už intuitívne, že tie 2 políčka budú username/password.
K tomu prvému riešeniu mi nenapadá ako to použiť (resp. zrejme to bude
na štýl function($control) { ... }
), ale netuším do ktorej
metódy to vložiť.
Avšak to druhé riešenie mi nenapadlo a ubral som sa týmto smerom. Vďaka za pomoc :)