Vložení divu k formuláři bez manuálního vykreslení
- ForestCZE
- Člen | 209
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
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
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 | 1280
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.
- ForestCZE
- Člen | 209
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ý.
- Petr Steinbauer
- Člen | 26
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í.
- Petr Steinbauer
- Člen | 26
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
@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)