Vlastní renderování file inputu, obalení inputu spanem

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

Ahoj, řeším následující situaci. V adminu používám na renderování formulářů lehce upravený render Bs3FormRenderer.

Pro formulářový prvek UploadControl se vygeneruje toto (trochu zjednodušeno):

<div class="form-group">
	<div>
		<label for="frm-form-image">Obrázek</label>
	</div>
	<div>
		<input name="image" id="frm-form-image" type="file">
		<span id="frm-form-image_message"></span>
	</div>
</div>

Potřeboval bych však input obalit spanem a přidat další HTML prvky, asi nějak takto:

<div class="form-group">
	<div>
		<label for="frm-form-image">Obrázek</label>
	</div>
	<div>
		<span class="fileinput-button btn btn-primary">
			<span>
				<i class="fa fa-plus"></i> Vložit soubor
			</span>
			<input type="file" name="image" id="frm-form-image">
		</span>
		<span id="frm-form-image_message"></span>
	</div>
</div>

V renderu (upavený Bs3FormRenderer) bych si představoval něco jako:

private function controlsInit()	{
	// ...
	foreach ($this->form->getControls() as $control) {
		// ...
		elseif ($control instanceof Controls\UploadControl) {
			// zde bych si představoval patřičný kód, který mi input obalí spanem atd.
		}
		// ...
	}
}

ale nevím, zda to je správná cesta.

  • Mohl bych renderovat ručně, ale formulářů bude hodně.
  • Mohl bych inputu doplnit CSS třídu a poté použít jQuery a veškeré potřebné HTML doplnit.

Mě by ale stejně zajímalo, jak by se to dalo udělat přímo v renderu.
Předem moc díky za radu, info.

GEpic
Člen | 566
+
0
-

Já se inspiroval twigridem (hlavně definicí bloků – v tomto případě tedy jednotlivých typů form. prkvů). Nadefinoval jsem si veškeré inputy jako text, number, email, select boxy, checkboxy, dokonce i výchozí podporu pro datetime picker, atp. Navíc jsem přidal podporu pro určování šířek na různých zařízeních, možnost přidat ikonu, a podobně (pomocí setAttribute přímo na prvku, ze kterého jsem to potom vytáhl, ale tyto atributy už jsem dále na prvku nevypisoval – trošku tricky, ale who cares). A v případě potřeby si jednotlivé prvky přetížím v konkrétním formuláři a jeho vlastní šabloně.

Editoval GEpic (29. 7. 2016 12:04)

flamengo
Člen | 135
+
0
-

@GEpic Bohužel netuším, co tím vším myslíš. Zas tak zdatný v Nette nejsem. Opravdu bych spíš rád věděl, jak to vyřešit ve výše uvedeném příkladu. Tedy jestli to vůbec lze.