Twitter Bootstrap vykreslování formuláře

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

Ahoj, mám v presenteru vytvořenej formulář s použitím BootstrapRenderer. Když vykresíl do šablony celý formulář pomocí

{control form}

tak vše funguje ale když ho vypíšu

{form form}
	{input name}
	{input send}
{/form form}

tak se mi formulář nevykresluje pomocí bootstrapu. Nevíte někdo co s tím?

Šaman
Člen | 2635
+
0
-

Myslím, že je to tím, že když zavoláš {control form}, tak se to přeloží na kód $form->render() a formulář render realizuje pomocí rendereru.

Pokud voláš makra form, input, label, … tak se žádný renderer nevolá, vykreslí se to pomocí těchto maker a form jen říká jaká data se těm makrům předají na vstupu.

TomasHuttner
Člen | 66
+
0
-

Když použiju klasickej bootstrap tak to funguje ale když použiju nějakej jinej styl ze stránky http://bootswatch.com tak to nefunguje.

MartinitCZ
Člen | 580
+
0
-

@**TomasHuttner**: Je to psané pro výchozí bootstrap. Pkud používáš jiný, tak si to musíš upravit. + Bootstrap 3, tímto addonem, není podporován.

David Matějka
Moderator | 6445
+
0
-

@martinit: na bootswatch je bootstrap pouze nastylovanej, je to zcela kompatibilni s twb
@TomasHuttner: a pouzivas z bootswatch styly pro twb 2?

Mesiah
Člen | 240
+
0
-

David na blogu php fashion píše o tom, jak použít Bootstrap2 i 3 v Nette 2.1 – nevýhoda je, že je potřeba renderer upravovat u každého formuláře; možná by to šlo i nějak zautomatizovat, ale nenapadá mě jak…

uestla
Backer | 796
+
0
-

Mesiah napsal(a):

… možná by to šlo i nějak zautomatizovat, ale nenapadá mě jak…

Třeba použít formulář jako komponentu a ve společném předkovi renderer nastavovat. Osobně na to mám vlastní metodu komponenty, která podle vzoru v Nette examples iteruje všemi prvky formuláře (protože ty nejsou ještě v momentě vytvoření známy) a dané CSS třídy navěšuje.

@hrachovo řešení níže je daleko lepšejší ;-)

Editoval uestla (8. 1. 2014 19:33)

hrach
Člen | 1834
+
0
-
sKopheK
Člen | 207
+
0
-

Protože se moje otázka k výše probranému úzce váže, abych nemusel zakládat vlastní téma, hodím to sem:

Máte nějaké řešení, když chcete vypsat za prvkem nějakou doprovodnou informaci (např. „zatrhnutím políčka se aktivují všechny blabla“)?

akadlec
Člen | 1326
+
0
-

Ano, renderovat formy ručně a nebo pro daný form si udělat extra šablonu. Já osobně zvolil cestu ručního renderování protože ty políčka formu mám docela dost protkána informacemi pro uživatele.

sKopheK
Člen | 207
+
0
-

Taky to tak mám, ale teď s přechodem na 2.1 se mi rozbilo vlastní makro pro vykreslování labelu, které jsem byl nucen napsat, protože Nette při ručním renderování zapomene přidat atribut class="required" (viz. https://forum.nette.org/…oveho-zapisu),. a ta nová zpětně kompatibilní notace {label nazev:} {input nazev:} ... {/label} mi vůbec nevypíše text labelu. Navíc, co si budeme povídat, mít všechny prvky formuláře na jediném místě je pěkně DRY :).

Takže si asi napíšu vlastní makro na výpis formuláře, „jak to mám rád“ – jen se bojím, že s příchodem nové verze se zase něco změní a makro budu muset složitě přepisovat.

Michalek
Člen | 210
+
0
-

Tohle předpokládám znáš, ale nevyhovuje?

$form->addText('phone', 'Číslo:')
    ->setOption('description', 'Toto číslo zůstane skryté');
sKopheK
Člen | 207
+
0
-

Neznal jsem, díky. Určitě využiji u toho vlastního makra. Je dobré, že to popisek přidruží k formulářovému prvku, ale při ručním vypisování je použití dost krkolomné a kód to pěkně znepřehlední.

amik
Člen | 118
+
+6
-

S kolegy jsme přetvořili oblíbený modul od @FilipProcházka pro vykreslování formulářů v BS2 pro bootstrap 3 se zachováním všech předností, jako např. makro {pair}, pokud máte zájem, najdete ho v composeru jako instante/bootstrap-3-renderer nebo na bitbucketu https://bitbucket.org/…renderer.git . Díky @FilipProcházka za skvělý základ a doufám, že se upgrade pro bootstrap 3 bude hodit :)