Vykreselní default hodnoty u formulářového prvku radioList a ručního vykreslení prvků formuláře

gizer
Člen | 62
+
0
-

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

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

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