Formulář: Dotaz a možnosti (radiolist) na novém řádku

hanchas
Člen | 3
+
0
-

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

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

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

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

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

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 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ě.

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í :)