Vykreslování isRequired u formulářů

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

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

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

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

Šaman
Člen | 2666
+
0
-

Nějakej fígl na to byl. Tak možná zkus RANGE a minimální délku 1.

llsm
Člen | 121
+
0
-

To je dost nehezký. Ale tady bych to víc neřešil, udělám na to samostatný topic na anglickém fóru, ať to tam trochu víc žije ; )