Vložení divu k formuláři bez manuálního vykreslení

ForestCZE
Člen | 209
+
0
-

Ahoj, chtěl bych použít Texy ve formuláři. Když mám:

$form = new Form;
$form->addText...
$form->addTextArea...
$form->addText...
...

Mohu si nad tu textAreau nějak hodit třeba div

<div>
	<i class="fas fa-bold"></i>
	<i class="fas fa-italic"></i>
	...
</div>

a zároveň zachovat použití

{control myForm}

pro vykreslení?

Mistrfilda
Člen | 76
+
0
-

Ahoj,

urcite to pujde udelat pres vlastni form renderer – https://doc.nette.org/…ms/rendering#… – pokud nepouzivas uz vlastni, tak se pouziva zakladni (https://api.nette.org/…enderer.html). Jak pridat neco k text area je ukazano napr. tu https://github.com/…endering.php#L40

ForestCZE
Člen | 209
+
0
-

Mistrfilda napsal(a):

Ahoj,

urcite to pujde udelat pres vlastni form renderer – https://doc.nette.org/…ms/rendering#… – pokud nepouzivas uz vlastni, tak se pouziva zakladni (https://api.nette.org/…enderer.html). Jak pridat neco k text area je ukazano napr. tu https://github.com/…endering.php#L40

Vlastní render jsem použil jednou a nebyla to žádná sláva. Je to pro mě španělská vesnice. Myslel jsem, že by tam mohlo být něco jako addContainer.

Marek Bartoš
Nette Blogger | 1171
+
+1
-

Manuální vykreslení je jednodušší než dřív, zkus makro formPrint
Pokud formulář používáš na více místech, tak jej vždy můžeš obalit do komponenty.

janpecha
Backer | 75
+
0
-

Podle té ukázky asi řešíš přidání tlačítek pro formátování textu – osobně bych tohle řešil rovnou v Java Scriptu, který stejně budeš potřebovat, než složitě ohýbal renderování formulářů.

ForestCZE
Člen | 209
+
0
-

janpecha napsal(a):

Podle té ukázky asi řešíš přidání tlačítek pro formátování textu – osobně bych tohle řešil rovnou v Java Scriptu, který stejně budeš potřebovat, než složitě ohýbal renderování formulářů.

Ano, JS budu potřebovat, ale mně se jedná o vložení těch tlačítek. Mám davakrát textAreu pomocí addTextArea a nevím, jak nad ně vložit ten div, kde budu mít ta tlačítka. JS už mám připravený.

ForestCZE
Člen | 209
+
0
-

Mabar napsal(a):

Manuální vykreslení je jednodušší než dřív, zkus makro formPrint
Pokud formulář používáš na více místech, tak jej vždy můžeš obalit do komponenty.

Geniální, díky :)

janpecha
Backer | 75
+
+3
-

Však ty tlačítka taky vlož přes JS – vyhledáš textareu, vložíš před ní ty tlačítka, navážeš na tlačítka eventy. IMHO je zbytečné kvůli tomu řešit manuální vykreslování, když je to v JS na 3 řádky.

Petr Steinbauer
Člen | 26
+
+1
-

Zdravím,
osobně nechávám vykreslování formulářů na nette a jen si velmi jednoduše na požadované místo do formuláře přidám požadované html pomoci HTML elementů.
Dokumentace: https://doc.nette.org/…tml-elements#…

Váš kód by vypadal cca takto:


$myDiv = Html::el('div');

$myI1 =  Html::el('i')->setAttribute('class', 'fas fa-bold');
$myDiv->addHtml($myI1);

$myI2 =  Html::el('i')->setAttribute('class', 'fas fa-italic');
$myDiv->addHtml($myI2);

$container->addHtml($myDiv);

je to jednoduché a efektní.

ForestCZE
Člen | 209
+
0
-

@PetrSteinbauer

$container->addHtml($myDiv);

Děkuji a ten $container jste vzal kde? Nedaří se mi to k tomu formuláři přidat.

Petr Steinbauer
Člen | 26
+
0
-

ForestCZE napsal(a):

@PetrSteinbauer

$container->addHtml($myDiv);

Děkuji a ten $container jste vzal kde? Nedaří se mi to k tomu formuláři přidat.

Ahoj,
promiňte, vzal jsem to z naší nástavby, občas zapomenu kde končí Nette, PHP7 a kde my :)

$container = $this->addContainer('klic', 'jmeno');

https://doc.nette.org/…rms/controls#…
(Přidá pod-formulář, nebo-li kontejner, do kterého lze přidávat další prvky stejným způsobem, jako je přidáváme do formuláře)

Díky tomu pak to

$container->addHtml($myDiv);

jde. Asi by mělo jít i $form->addHtml($myDiv); ale přiznám se, tak malý formulář aby neměl containery (části) jsem ještě nedělal :)

ForestCZE
Člen | 209
+
0
-

@PetrSteinbauer

$form->addHtml($myDiv);

jsem samozřejmě zkoušel, ale formulář takovou metodu nemá. Proto se tak hloupě ptám :) A container použít nemohu, protože potřebuju přidat divs mezi políčka a ne pod formulář.

EDIT: Zkusil jsem:

$container = $form->addContainer('test');
$container->addHtml($myDiv);

A píše: Call to undefined method Nette\Forms\Container::addHtml().

Tak tedy vůbec nevím, jak jste to myslel.

Editoval ForestCZE (24. 8. 2020 1:17)

janpecha
Backer | 75
+
0
-

Formulář ani kontejner standardně takové metody nemá, u @PetrSteinbauer to asi řeší nějaká nadstavba.

ForestCZE
Člen | 209
+
0
-

@janpecha Poradil bys mi prosím, jak na ten JS?

janpecha
Backer | 75
+
0
-

Používáš na JS nějakou knihovnu (Jquery,…), nebo používáš čistý JS? Ukaž případně jak máš teď to navázání eventů na tlačítka.

Editoval janpecha (26. 8. 2020 7:37)

ForestCZE
Člen | 209
+
0
-

@janpecha mám to takto a jde mi o to nějak ten div dostat do formuláře, který je přes {control myForm}

janpecha
Backer | 75
+
+1
-

V čistém JS třeba nějak takhle https://jsfiddle.net/2zex940u/