Jak nejlépe seskládat formulář
- Jakub Šulák
- Člen | 222
Mám takovýto problém:
Mám komponentu (datagrid), která v každém sloupci na druhém řádku bude
mít nějaký input,select, nebo jiný formulářový prvek. Celý řádek pak
bude formulář – tedy jeden formulář – bude to sloužit
k vyhledávání ve sloupcích.
Takže v 1. sloupci vygeneruji:
<?php
/** vygeneruje formularovy prvek */
public function generateInput()
{
$this->searchInput = new TextInput('label');
}
?>
A teď potřebuji (v presenteru nebo stačí přímo v šabloně) vzít všechny objekty, které mají ve vlastnosti searchInput nějaký objekt (extends FormControl) a „obalit je“ AppForm (abych mohl poté zpracovat v komponentě ten formulář).
Můžete mi někdo poradit jak v Nette obalit ty jednotlivé formulářové prvky do formuláře? A jak s ním potom pracovat? Důležité také je, že musím v šabloně ty prvky rozmístit stylem (ručně) – ten kód je vymyšlený:
<?php
<tr><td>{$form->input1->render()}</td></tr>
?>
Máte s tím někdo zkušenost, nebo můžete mě někam odkázat. Nějak to nemohu nikde najít.
- Jakub Šulák
- Člen | 222
Zeptám se jinak, jak mohu objekt typu $i = new TextInput(‚Label‘) vypsat do šablony pomocí {$i}?
Vím, že takto jednodušše to nejde, vypíše se chyba, že neexisujte
metoda __tostring().
Takže tento objekt musím něčím obalit, ne? Pokud bych to obalil něčím,
co tu metodu __tostring (nebo jiný renderovací nástroj), tak se mi to
vypíše.
Mohu si samozřejmě udělat vlastní odvozenou třídu, ale nechci vrtat do frameworku, jistě tohle umí sám – jen já nevím jak.
- kravčo
- Člen | 721
najjednoduchšie je použiť input spolu s formulárom
$form = new Form;
$form->addText('moj_text', 'Toto je môj text:');
pričom formulár je v šablóne možné vykresliť pomocou
{$form}
(štandardne pomocou triedy ConventionalRenderer). Pre
vlastné prispôsobenie vykresľovania je odporúčané napísať si vlastný
renderer. Inak je možné použiť metódy getControl()
&
getLabel()
, ktoré vrátia html prvku & jeho popisu (v tom
poradí). Avšak v prípade, že údaje z formulára sa niekde ďalej
spracúvajú, treba všetko ostatné (napr. správne url actionu pre formulár)
vykresliť taktiež ručne…