Přidání html prvku do formuláře

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

Ahoj, chci se zeptat

  1. jak se dá jednoduše přidat nějaký html prvek do formu.

něco jako

$form->addHtml('<div>...</div>');

například přidám do formu pár inputů poté chci vykreslit nějaký html kus a poté zase další formulářové prvky.

  1. jak mohu nechat zmizet label u checkboxListu ? Koukal jsem zde na nějaká vlákna a řešením bylo přidat na konec elementu
->getPrototypeLabel()->setClass('hidden') //nebo tak nějak

to mi ale v checkboxListu nastavilo hidden u každého labelu, což je špatně.

Díky.

Filip Klimeš
Nette Blogger | 156
+
0
-

V Tvém případě bych použil manuální rendering.

(Ne)vykreslit label můžeš podle své logiky nějak takhle:

{foreach $form[myCheckboxList]->items as $key => $label}
    {if $key !== 'withoutLabel'}<label n:name="gender:$key">{/if}
		<input n:name="gender:$key">
	{if $key !== 'withoutLabel'}{$label}</label>{/if}
{/foreach}
kleinpetr
Člen | 480
+
0
-

Právě, že už to mám celé postavené na tom, že nechci používat vlastní rendering, proto se to snažím řešit takhle..

romiix.org
Člen | 343
+
0
-

Element addHtml() si musíš doprogramovat.

Tiež som ho potreboval, nie je to nič zložité.

Komponentu žial nemam na githube a ani pri sebe.

ali
Člen | 342
+
0
-

1. Todle to delam tak, ze si to pridam pres nejakou skupinu

$form->addGroup(1)
	->setOption("description",Html::el()->setHtml("blabla")
kleinpetr
Člen | 480
+
0
-

No alespoň něco, ale spíš by se mi hodilo kdyby se dala alespoň u groupu změnit class. Mám nastavený nějaký defaultní wrappery pro skupiny, ale u některých potřebuji tu třídu změnit a nevím zda je to možné.

ali
Člen | 342
+
0
-

no a zkousel jsi to pres ->setAttribute(„class“,„neco“)?

kleinpetr
Člen | 480
+
0
-

Ano, //Call to undefined method Nette\Forms\ControlGroup::setAttribute()

kleinpetr
Člen | 480
+
0
-

Vyřešeno:

$this->addGroup()->setOption('container','filedset class = trida')

Díky

H0w4rd
Člen | 95
+
+3
-

Ad 1 – je potřeba přidat vlastní formulářový prvek. Hned se můžu podělit o nově nabyté znalosti ze školení ;-)

Vytvoř si třídu:

class Div extends Nette\Forms\Controls\BaseControl
{
    function getControl()
	{
		return '<div>...</div>';
	}
}

A potom to hoď do formuláře takhle:

$form["neco"] = new \Div();

Samozřejmě nazvi tu třídu nějak lépe a přidej si tam nějaký text, který se vloží do divu. Je možné i rozšířit form o další metodu, abys to mohl dělat hezčím způsobem:

Nette\Object::extensionMethod('Nette\Forms\Container::addDiv', function($form, $name, $label = NULL){
    $form[$name] = new \Div($label);
});

A pak už můžeš psát:

$form->addDiv("nazev", "text");

Ad 2 – to bys také dokázal udělat pomocí vlastního formulářového prvku, nedoporučuje se dědit přímo checkbox, i když by to asi taky šlo (zavolat parent metodu a upravit výstup), ale spíš oddědit ChoiceControl a udělat si vlastní checkbox.
Přiznám se, že jsem to zatím řešil javascriptem, který label přehodil do prázdné buňky tabulky před checkbox. Teď se budu muset také zamyslet nad lepším řešením.

kikinet
Člen | 35
+
0
-
Nette\Object::extensionMethod('Nette\Forms\Container::addDiv', function($form, $name, $label = NULL){
    $form[$name] = new \Div($label);
});

Jde tento kousek kódu taky vložit do Div.php, abych to v každém formu nemusela vypisovat a mohla rovnou použít addDiv() ?

Unlink
Člen | 298
+
0
-

Do boostrap.php pred ten return na konci.

kikinet
Člen | 35
+
0
-

Skvělé! Díky :)