Tabulkový renderer (několi sloupců), nastavování počátečních hodnot a psaní vlastního rendereru obecně

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

Někdy je potřeba vykreslovat formulář do tabulky tím způsobem, že mám pár sloupců a třeba v každém řádku několik formulářových vstupů. Toho lze v zásadě docílit dvěma způsoby:

  • hrát si s formulářem v šabloně (zavání to strašnýma prasárnama, ostatně jsem byl za takové šablony kritizován)
  • udělat vlastní renderer

O možnosti psát vlastní renderer jsem věděl již dávno. Teprve teď jsem se do toho ale pustil. Myslel jsem si, že to bude relativně jednoduché. Ale mýlil jsem se. Moc jsem si nepomohl i s děděním z ConventionalRendereru a přepsáním renderBody, což sice taky do jisté míry funguje, ale není to IMHO úplně čisté (logiku původní třídy nespecializuji, ale měním).
Dostal jsem se tedy do fáze, kdy mi to funguje až na nastavování počátečních hodnot (výchozí hodnoty, hodnoty ze špatně vyplněného formuláře), částečně jsem to ohackoval a v podstatných rysech to evidentně funguje jak má, ale nadšen z toho nejsem. Při vynechání volání setRenderer na formuláři funguje vyplňování hodnot jak má.
Podíval jsem se na jiné renderery a zjistil jsem, že jich moc není. ConventionalRenderer je velmi složitý, ScaffoldingRenderer řeší něco jiného a i u několika málo dalších rendererů jsem nenašel řešení mého problému. Často jsem našel jen krátkou informaci, že renderer si mohu napsat vlastní.

  • Jak souvisí renderer s nastavováním hodnot? Co tam mohu dělat špatně?
  • Řešili jste někdo již vykreslování formuláře do tabulky?
  • Kód mám, obsahuje něco málo hacků. Věřím, že takovou funkčnost by uvítalo více lidí. Nechce se někdo toho kódu ujmout? Myslím, že v mých rukou asi nebude podléhat zrovna živelnému vývoji. Vypustit bych jej asi mohl.
  • A vůbec, existují nějaké best practices nebo nějaké tipy pro psaní rendererů?

Možná to bude chtít toto téma rozdělit na více částí, ale to spíše teprve uvidíme.

Nilp
Člen | 65
+
0
-

Proč by mělo být ruční vykreslování formulářů prasárna? Mně to připadá jako zdaleka nejčistší způsob.

v6ak
Člen | 206
+
0
-

Představ si, že máš proměnlivý počet řádků. Pak to asi budeš chtít zpracovat nějakým for cyklem. Ještě by asi šlo, kdyby se šablona nějak dozvěděla o počtu řádků, což ale je taky problém, protože v době vytváření komponenty nelze obvyklým způsobem tyto informace předávat. Další možností je v renderu vynutit vytvoření formulářové komponenty, což je taky hack. Moje řešení tedy spočívalo v projetí formulářových prvků, zpracování jejich názvů, roztřídění do pole a následného vykreslování pole. A to je asi něco úplně jiného, než sis představoval.

Nilp
Člen | 65
+
0
-

To ano, dynamický počet řádků jsem naštěstí nemusel řešit. S psaním rendereru nemám žádné zkušenosti.

David Grudl
Nette Core | 8228
+
0
-

V Nette se brzi objeví elastická formulářová komponenta, která bude tento problém řešit.