Jak v Nette 0.9.7 vykreslit formulář po svém?

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

dobrý den, vím že je tu mnoho otázek v podobném stylu, googlil a četl jsem, ale můj problém nic z toho neřeší…

mám v presenteru továrničkovou metodu na formulář, která přijímá parametr – pole hodnot přes které iteruje a pojmenovává podle těch hodnot checkboxy a pak přihodí jěště pár kontrolek.

Při renderView pak přiřazuji do proměnné templatu výsledný form. V templatu jej potřebuju vykreslit po kontrolkách, protože např dané checkboxy jdou do tabulky k jejím položkám, ostatní kontrolky mají jít nad tabulku, atď…

HomepagePresenter

<?php
    private function getPreparePrintForm($ic)
    {
      $form = new NForm('PreparePrint');

      $form->method = 'post';
      $form->action = $this->link('Print:default');
      $form->addGroup('Príprava na tlač');
      $form->addCheckbox('PrepareLetter', 'Dopis s oslovením');
      $form->addCheckbox('PrepareInvoice', 'Faktúra');
      $form->addCheckbox('PrepareCheck', 'Šek (poštová poukážka)');
      $form->addCheckbox('PreparePassword', 'Heslo do klientskej časti');

      if(!is_array($ic))
      {
        !is_null($ic)? $form->addHidden('chkCompany_' . $ic, 'on') : false;
      }
      elseif(is_array($ic))
      {
        foreach($ic as $compIc)
        {
          $form->addCheckBox('chkCompany_' . $compIc);
        }
      }

      $form->addSubmit('cmdSubmit', 'Pripraviť tlač označených');

      return $form;
    }

public function renderDefault()
	{
      $model = new m_companies();

      $companies = $model->getRequiringAttention();

      foreach($companies as $val)
      {
        $iclist[] = $val["company_ic"];
      }

      $printForm = $this->getPreparePrintForm($iclist);

      //$this->template->debug = serialize($companies);
      $companies = $this->prepareCompanies($companies);

      $this->template->printForm = $printForm;
      $this->template->mainList = $companies;
	}
?>

V template jsem zkoušel všechno co mě napadlo a co jsem našel, zkoušel jsem přistupovat ke komponentům formu přes components[‚jméno komponentu‘], controls[‚jméno komponentu‘], zkoušel jsem $printForm->getRenderer()->renderControl($hodnota), kdy jsem za hodnotu dával $printForm[‚PrepareLetter‘], $printForm->controls[‚PrepareLetter‘], $printForm->components[‚PrepareLetter‘], $printForm->getComponent(‚PrepareLetter‘)… a pořád mi to na daném místě hlásí že daný komponent neexistuje…
template je teď na s..cucky, takže dávat ho sem nemá smysl, každopádně snažím se form renderovat jako komponentu (před těmi pokusy o render jednotlivých kontrolek mám {control $printForm begin}, nevim, asi je to blbost ale nic lepšího mě nenapadlo…

A zkrátka potřebuju aby se form vytvořil v presenteru (abych mu mohl hodit do tovární metody ten parametr – jen bych poznamenal že kdyby tam nebyla tahle podmínka, tak to umím, custom render formu po kontrolkách, když je on sám normální komponenta už jsem dělal), a potřebuju si umět vyrenderovat jeho části kde chci (protože obsahuje seznam checkboxů k záznamům v tabulce), a už vážně nevím jak na to… v tomto momentě mě napadá že by bylo asi nejjednodušší se při tomhle formuláři vys…kašlat na Latte a cokoliv a celý Nette prostě obejít a naklepat si jej tam ve starým dobrým php/html mixu, i když se mi tato varianta moc nelíbí…

Jakékoliv rady, nápady, návrhy, cokoliv, bude s velkou vděkou vítané.
(Dost to spěchá :()

Editoval Midnight (20. 6. 2011 15:46)