Formulář: Dotaz a možnosti (radiolist) na novém řádku
- hanchas
- Člen | 3
Ahoj všem,
prosím o pomoc. Hledala jsem všude, ale zatím jsem nenašla nic, co by pomohlo. Jak vložím otázku a možnosti radiolistu na separátní řádky?
V Presenteru to vypadá takto:
$form->addRadioList (‚otazka7‘, ‚Nejvíce se mi líbí šifry
z šifrovačky:‘, array(
‚1‘ ⇒ ‚Sendvič‘,
‚2‘ ⇒ ‚Matrix‘,
‚3‘ ⇒ ‚Krutá (zá)krůta‘,
‚4‘ ⇒ ‚NaPALMně‘,
));
Ale nevím, kam mám strkat něco, co udělá za otázkou nový řádek. A co vůbec ten nový řádek účinně udělá. Asi je to prkotina a možná právě proto to nikde není. Ale moc by mi to pomohlo. Takhle to totiž vypadá fakt hrozně, zvlášť když otázky a odpovědi máme většinou poměrně dlouhé.
- Ondřej Kubíček
- Člen | 494
ahoj,
podle mě nejjednodušší bude vykreslit ten form manuálně, pak si tam
můžeš udělat co chceš
{foreach $form[otazka7]->items as $key => $label}
<label n:name="otazka7:$key"><input n:name="otazka7:$key"> {$label}</label>
{/foreach}
nicméně i to html co ti vygeneruje, můžeš stylama dost ovlivnit, takže si myslím, že ti stačí pohrát si s css a nebo případně ještě upravit wrappers
- hanchas
- Člen | 3
Oj. Díky moc za odpověď.
No…
Já z toho tedy nejsem moc moudrá, jinými slovy: V Nette jsem totální
začátečník a řekněme, že jsem „zdědila“ jiné stránky, v kterých
se teď snažím orientovat a občas tam něco pozměním.
To opravdu neexistuje nějaký jednodušší způsob, jak udělat nový
řádek, než celý formulář vykreslovat bod po bodu manuálně?
Teď je celý formulář se spoustou položek vykreslován pomocí
templates/Registrace/default.latte
{block content}
<h1>Registrace</h1>
{control registraceForm}
{/block}
Pokud z toho chci ale najednou udělat vykreslení, jaké ty píšeš, tak vůbec nevím, jak na to…
- David Matějka
- Moderator | 6445
defaultne by se mely mezi jednotlivymi polozkami zobrazovat jako separatory
<br>
, viz https://api.nette.org/…ist.php.html#44
neni tam nekde kod, ktery (pres volani getSeparatorPrototype
)
meni tento separator?
- nightfish
- Člen | 519
Pokud v šabloně používáš {control form}
, použije se pro
vykreslení formuláře DefaultRenderer. Ten standardně obalí
všechny prvky formuláře do tabulky, kdy label skončí v první
buňce na řádku a input ve druhé buňce. Změnit chování
DefaultRendereru je možné přepsáním pole $wrappers
v Presenteru (ještě před vykreslením formuláře, pro testování jsem jej
nacpal přímo do createComponent...()
), třeba takhle:
$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = null;
$renderer->wrappers['pair']['container'] = null;
$renderer->wrappers['label']['container'] = 'div';
$renderer->wrappers['control']['container'] = 'div';
Jen je otázka, jestli ti tohle nerozbije zbytek formuláře. Pokud ano, tak nejjednodušší variantou bude použít ruční vykreslování.
Více informací (i s vizualizací co která položka ve $wrappers znamená) najdeš v nápovědě.
- hanchas
- Člen | 3
nightfish napsal(a):
Pokud v šabloně používáš
{control form}
, použije se pro vykreslení formuláře DefaultRenderer. Ten standardně obalí všechny prvky formuláře do tabulky, kdy label skončí v první buňce na řádku a input ve druhé buňce. Změnit chování DefaultRendereru je možné přepsáním pole$wrappers
v Presenteru (ještě před vykreslením formuláře, pro testování jsem jej nacpal přímo docreateComponent...()
), třeba takhle:$renderer = $form->getRenderer(); $renderer->wrappers['controls']['container'] = null; $renderer->wrappers['pair']['container'] = null; $renderer->wrappers['label']['container'] = 'div'; $renderer->wrappers['control']['container'] = 'div';
Jen je otázka, jestli ti tohle nerozbije zbytek formuláře. Pokud ano, tak nejjednodušší variantou bude použít ruční vykreslování.
Více informací (i s vizualizací co která položka ve $wrappers znamená) najdeš v nápovědě.
Díky moc za podrobnou radu, tohle fungovalo :) Na novém řádku je tedy teď úplně všechno ve formuláři (nejen radiolisty), ale to mi zas tak nevadí :)