Vykreslování isRequired u formulářů
- CJHornster
- Člen | 56
Čau,
potřeboval bych pomoct je možné isRequired nějak vykreslit ve formu místo toho aby se zobrazoval v message boxu? Používám bootstrap na rychlé stylování a tady je definice formu
$form = new Nette\Application\UI\Form;
$form->elementPrototype->addAttributes(array('class' => 'form-vertical col-md-3'));
$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = 'div';
$renderer->wrappers['pair']['container'] = NULL;
$renderer->wrappers['label']['container'] = 'div class="col-md-2 control-label"';
$renderer->wrappers['control']['container'] = 'div class="form-group"';
$form->addText('username', 'Username:')
->setAttribute('placeholder', 'Username')
->setAttribute('class', 'form-control')
->setRequired('Prosím zadejte uživatelské jméno.');
$form->addPassword('password', 'Password:')
->setAttribute('placeholder', 'password')
->setAttribute('class', 'form-control')
->setRequired('Prosím zadejte heslo.');
$form->addCheckbox('remember', ' Pamatovat si přihlášení?');
$form->addSubmit('send', 'Přihlásit se')
->setAttribute('class', 'btn btn-default btn-block');
// call method signInFormSucceeded() on success
$form->onSuccess[] = $this->signInFormSucceeded;
return $form;
chtěl bych třeba zprávu ->setRequired(‚Prosím zadejte uživatelské jméno.‘); zobrazit pod inputem username.
dál se chci zeptat k čemu přesně je $form->elementPrototype->addAttributes(array(‚class‘ ⇒ ‚form-vertical col-md-3‘)); nějak se mě to nedaří pobrat (spíš to elementPrototype)
taky se chci zeptat jestli neni lepší místo
$renderer->wrappers['controls']['container'] = 'div';
$renderer->wrappers['pair']['container'] = NULL;
$renderer->wrappers['label']['container'] = 'div class="col-md-2 control-label"';
$renderer->wrappers['control']['container'] = 'div class="form-group"';
použít zápis
{form signForm class => 'big'}
<table>
<tr class="required">
<th>{label name /}</th>
<td>{input name cols => 40, autofocus => TRUE}</td>
</tr>
{/form}
- Šaman
- Člen | 2666
Renderer můžeš nastavit u formuláře a pak jen vykreslovat formulář jako {control fooForm}. Je to asi nejjednodušší způsob, jak ovlivnit formátování a proto je použitý.
Pokud použiješ komponentu s ruční šablonou, tak máš víc možností úprav a přesně to bych ti doporučoval pro změnu toho, kam se ti hlášky vypíšou. Jen bych rád upozornil, že alert u require polí ti dělá prohlížeč. Zkus místo setRequired (které přidá třídu required) použít obyčejný addRule a pravidlo FILLED.
Ten col-md-3
dělá to, že na label se použijí 3 sloupce
z 12ti (bootstrap3 formátování).
Edit: Tak ten alert asi nedělá prohlížeč (ten to řeší takovou
bublinou, aspoň FF), ale JS nette.forms.js
Tak si buď budeš muset upravit JS a vkládat hlášku kam potřebuješ, nebo
vypni js validaci a nech to schoupat server, který ti vrátí pole
$form->errors a ty se vypíšou tou šablonou kam potřebuješ.
Editoval Šaman (23. 7. 2014 16:49)
- llsm
- Člen | 121
Nepřišel jsem ted na možnost, jak zamezit vypsani required do toho html inputu (Nette 2.2.2). Pri Form::FILLED i setRequired to tam nacpe a tim padem nejde docilit toho, ze by prohlizec zobrazil tu chybovou zpravu (kdyz nemam js k formularum). Misto toho jen zvyrazni vsechny nevyplnena pole a pripadne prida bublinu