Vykreselní default hodnoty u formulářového prvku radioList a ručního vykreslení prvků formuláře
- gizer
- Člen | 67
Zdravím,
asi to zase bude nějaká drobnost, ale mám problém s vykreslením defaultní hodnoty u radioListu. Pokud vykreslím formulář pomocí {control nameForm} tak je všechno v pořádku. Hůře se to ale styluje. Tak to zkouším zapsat pomocí vykreslení jednotlivých prvků takto.
Presenter:
namespace App\AdminModule\Presenters;
use Nette;
use Nette\Application\UI\Form;
class EdittestPresenter extends BasePresenter
{
protected function createComponentQuestionsForm()
{
$form = new Form;
$testforms = $this->database->table('testform');
foreach($testforms as $testform) {
/*3 sloupce odpovědí načteme do pole*/
$arrayAnswers[]= $testform->answer1;
$arrayAnswers[]= $testform->answer2;
$arrayAnswers[]= $testform->answer3;
$form->addRadioList('question'.$testform->questionNumber, 'Otázka č.'.$testform->questionNumber.': '.$testform->question, $arrayAnswers)
->setRequired('Tohle pole je povinné')
->setDefaultValue($testform->rightAnswer-1);
unset($arrayAnswers);
}
return $form;
}
...
...
Jedná se vlastně o pole radioListu, které vytvářejí testovací formulář.
Šablona:
{block content}
{form questionsForm}
<div n:foreach="$testforms as $testform" class="question">
<table>
<tr>
<td colspan="2" class="ques-desc">{label question$testform->questionNumber}</td>
</tr>
<tr>
<td>{input question$testform->questionNumber:$testform->answer1}</td>
<td>{$testform->answer1}</td>
</tr>
<tr>
<td>{input question$testform->questionNumber:$testform->answer2}</td>
<td>{$testform->answer2}</td>
</tr>
<tr>
<td>{input question$testform->questionNumber:$testform->answer3}</td>
<td>{$testform->answer3}</td>
</tr>
</table>
{* {control questionsForm}*}
<div class="info_wrap">
<svg class="icon icon-info"><use xlink:href="#icon-info"></use></svg>
<div class="info_content">
<p>Správná odpověď je s číslem {$testform->rightAnswer}</p>
</div>
</div>
<a class="btn-edit" n:href="Edittestitem:edittestitem $testform->id, $testform->questionNumber">Uprav otázku
a odpovědi</a>
</div>
<a class="btn-edit" n:href="Inserttestitem:inserttestitem">Vlož další otázku</a>
<a class="btn-edit" n:href="Edittestitem:delete $summax">Smaž poslední otázku</a>
{/form}
</div>
Všechno funguje i s tímto výpisem jednotlivých prvků firmuláře. Pouze se nezobrazuje defaultní nastavení. Nevím, kde mohu dělat chybu? Děkuji za případnou pomoc.
- m.brecher
- Generous Backer | 873
Ahoj,
kód jsem nezkloušel tak jenom střílím od boku, kde by mohla být chyba. V dokumentaci Nette je popsán příklad, jak vykreslit v latte ručně jednotlivé prvky radiolistu:
{input radioList:itemKey} | {input radioList:itemKeyTwo}
Ve svém latte kódu používáš pro vykreslení jednoho prvku radiolistu tento kód:
{input question$testform->questionNumber:$testform->answer1}, atd...
Tedy jako itemKey dosadíš hodnoty $testform->answer1, atd…
Přitom do formuláře při vytváření prvku ‚question‘.$testform->questionNumber předáváš položky v poli $arrayAnswers. V tomto poli jsou hodnoty $testform->answer1 nikoliv klíč (key), ale hodnota (value). Klíče se vytvoří automaticky jako 0, 1, 2, atd…
Myslím, že jako itemKey bys měl dosadit 0, 1, 2, ne $testform->answer1, $testform->answer2, …
Ale nezkoušel jsem to, střílím od boku.
- gizer
- Člen | 67
Zdravím,
super, děkuji moc. Opravdu to pomohlo. Použil jsem chybně hodnotu namísto klíče. Takže upravená funkční šablona vypadá teď takto.
Šablona :
...
{form questionsForm}
<div n:foreach="$testforms as $testform" class="question">
<table>
<tr>
<td colspan="2" class="ques-desc">{label question$testform->questionNumber}</td>
</tr>
<tr>
<td>{input question$testform->questionNumber:0}</td>
<td>{$testform->answer1}</td>
</tr>
<tr>
<td>{input question$testform->questionNumber:1}</td>
<td>{$testform->answer2}</td>
</tr>
<tr>
<td>{input question$testform->questionNumber:2}</td>
<td>{$testform->answer3}</td>
</tr>
</table>
...
...