Vloženie span-u do labelu vo formulári

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

Zdravím,
Potreboval by som vložiť span do labelu tak aby výsledok bol

<label>Klientské ID<span class="red">*</span></label>

viem, že sa to robí cez

Html::el('span')

ale neviem ako ďalej a kam to dosadiť našiel som aj iné diskusie ale sú dosť mätúce a môj problém to nevyriešilo.

Vopred všetkým ďakujem.

SontoEremo
Člen | 341
+
0
-

Vďaka @matej21
Ale to som prešiel ako vravím stále neviem ako ďalej mám toto

$loginForm->addText('...', 'Klientské ID', Html::el('span', '*'));

Ak si pozriem výsledok v zdrojáku tak to mám v inpute

<input type="text" name="..." size="<span>*</span>" placeholder="...." id="frm-loginForm-...">

a ani neviem ako definovať potom v tom spane aj class=„red“.

Takže sa mi podarilo toto

Html::el('span', '*')->class('red')

Ale stále nemám tušenie ako to vložiť aby bol výsledok

<label for="frm-loginForm-...">Bla Bla Bla<span>*</span></label>

Editoval SontoEremo (3. 12. 2014 23:34)

janpecha
Backer | 75
+
0
-

Zkus getLabelPrototype, ten vrací Html objekt, který si můžeš upravit jak chceš.

Oli
Člen | 1215
+
0
-

Nefunguje ti to, protože 3. parametr je velikost pole. Musíš to dát všechno do 2. parametru.

Zrovna u té hvězdičky bych si to navěsil na to, když to pole bude vyžadováno. Takže si buď poděď Form z nette a vlož to tam nebo to vlož přímo do formuláře. Potom, když budeš mít u form. prvku setRequire, tak se ti tam připojí ta hvězdička.

$renderer = $this->getRenderer();
$renderer->wrappers['label']['requiredsuffix'] = \Nette\Utils\Html::el('span', '*')->addAttributes(['class' => 'red']);

viz. Vzhled formulářů

SontoEremo
Člen | 341
+
0
-

díky @Oli Prepáč mi ale akokoľvek sa snažím to spraviť aj keď form označím setRequired(); tak sa nedeje nič.

$renderer = $loginForm->getRenderer();
		$renderer->wrappers['label']['requiredsuffix'] = Html::el('span', '*')->addAttributes(['class' => 'red']);
		$loginForm->addText('...', 'Klientské ID')
				  ->setAttribute('placeholder', '...')
				  ->setRequired();
Oli
Člen | 1215
+
0
-

To je divný. Takhle by to mělo fungovat. Jak to vykresluješ v šabloně? Pomocí {control formComponentName}? Zkus se podívat ještě sem, jestli to děláš podobně. Hlavně to nastavení renderu.

Edit: má ten input vubec atribut required?

Editoval Oli (4. 12. 2014 10:15)

SontoEremo
Člen | 341
+
0
-

Takto to mám v šablóne

{form loginForm}
					<div class="form-input">
						{label client_ID/}
						{input client_ID}
					</div>
					<div class="form-input">
						{label client_password/}
						{input client_password}
					</div>
					<div class="form-input">
						{input signIn class=>"btn btn-large main-bg"}
					</div>
				{/form}

A toto je Presenter

protected function createComponentLoginForm() {
		$loginForm = new Form;
		$loginForm->addProtection();
		//$renderer = $loginForm->getRenderer();
		//$renderer->wrappers['label']['requiredsuffix'] = Html::el('span', '*')->addAttributes(['class' => 'red']);
		$loginForm->addText('client_ID', 'Klientské ID')
				  ->setAttribute('placeholder', 'napr. ECB123456')
				  ->setRequired();
		$loginForm->addPassword('client_password', 'Heslo')
				  ->setAttribute('placeholder', 'Vaše heslo')
				  ->setRequired();
		$loginForm->addSubmit('signIn', 'Prihlásiť sa');
		$loginForm->getElementPrototype()->id = "reg_form";
		$loginForm->onSuccess[] = $this->loginFormSuccessSubmited;
		return $loginForm;
	}
ali
Člen | 342
+
+2
-
$loginForm->addText('client_ID',Html::el()->setHtml("Klientské ID<span class='red'>*</span>"))
                  ->setAttribute('placeholder', 'napr. ECB123456')
                  ->setRequired();

Editoval ali (4. 12. 2014 11:50)

Oli
Člen | 1215
+
0
-

Zkus to vykreslit pomocí {control loginForm}, nevím jestli to na to má vliv, případně najít nějaký makro, který to vykresluje. Já používám buď automatickej rendering nebo n:makra, pokud to je složitější formulář…
Případně, jestli to vykresluješ ručně v šabloně, tak to je většinou složitější formulář a můžeš použít i něco jako

<div class="form-input">
	<label n:name=client_ID>Username<span class="red">*</span>: <input n:name=client_ID></label>
</div>

viz.: FORMULÁŘE V NETTE 2.1

SontoEremo
Člen | 341
+
0
-

Áno @ali díky to je presne ono…
Aká banálna vec a toľko ma zdržala :)

Ešte raz Vám všetkým Ďakujem.

greeny
Člen | 405
+
0
-

Nemyslím si, že to bude fungovat, labely by měly být chráněný proti XSS, takže ti tam z toho vzniknou < a >

David Matějka
Moderator | 6445
+
0
-

@greeny Html objekt se neescapuje, bude to fungovat