Flastní formrender implements Nette\Forms\IFormRenderer

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

Zdravím,

pokouším se o vlastní formRenderer zápasím s vykreslením addRadioList:

protected function createComponentTaskForm() {

    $form = new Form();

    $form->setRenderer( new \Nette\Forms\Rendering\MyFormRenderer() );

    $sex = array(
        'm' => 'muž',
        'f' => 'žena',
    );

    $form->addRadioList('gender', 'Pohlaví:', $sex);

    $form->addSubmit('create', 'Vytvořit');
    return $form;
}
<?php

namespace Nette\Forms\Rendering;

use Nette,
    Nette\Utils\Html;

class MyFormRenderer extends Nette\Object implements Nette\Forms\IFormRenderer {

    /** @var Nette\Forms\Form */
    protected $form;

    public function render(Nette\Forms\Form $form, $mode = NULL) {
        $this->form = $form;
        return $this->renderControls($this->form);
    }

    public function renderControls($parent) {
        $container = Html::el("form");

        foreach ($parent->getControls() as $control) {
            $container->add($this->renderControl($control));
        }

        $s = '';
        if (count($container)) {
            $s .= "\n" . $container . "\n";
        }
        return $s;
    }

    public function renderControl(Nette\Forms\IControl $control) {
        $body = Html::el("div");

        $el = $control->getControl();
        return $body->setHtml($el);
    }

}

vygeneruje následující kód:

<form novalidate="">
   <div>
      <label for="frm-taskForm-gender-m">
         <input type="radio" name="gender" id="frm-taskForm-gender-m" value="m">muž
      </label>
      <label for="frm-taskForm-gender-f">
         <input type="radio" name="gender" id="frm-taskForm-gender-f" value="f">žena
      </label>
   </div>
   <div>
      <input type="submit" name="create" value="Vytvořit">
   </div>
<div>
<input type="hidden" name="do" value="taskForm-submit"></div>
</form>

Já bych chtěl každý label ještě obalit do <div class=„radio“>:

<div>
   <div class="radio">
      <label for="frm-taskForm-gender-m">
         <input type="radio" name="gender" id="frm-taskForm-gender-m" value="m">muž
      </label>
   </div>
   <div class="radio">
      <label for="frm-taskForm-gender-f">
         <input type="radio" name="gender" id="frm-taskForm-gender-f" value="f">žena
      </label>
   </div>
</div>

Nevěděl by někdo jak na to?