Odstránenie label vo formulári

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

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
+
0
-

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
+
0
-

Ď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 :)