Formulář jako komponenta s manuálním vykreslením
- Fires
- Člen | 97
Zdravím, snažím se umístit formulář jako komponentu ale jak je to s vykreslením? Formulář ma složitější design takže se nejedná o „čtvercový výřez stránky“ potřebuji tedy manuální vykreslení pro komponentu. Pokud se pokusím označit v šabloně klasicky přes {form name}{/form} tak se mi samožřejmě nevykreslí Argument #1 ($form) must be of type Nette\Forms\Form, App\Components\CategoryTree\ItemEditControl Předem díky za radu
presenter
public function createComponentItemEditForm(){
$control = $this->itemEditFormFactory->create();
return $control;
}
komponenta
<?php
namespace App\Components\CategoryTree;
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;
class ItemEditControl extends Control
{
public array $onSave = [];
public function createComponentForm()
{
$form = new Form();
$form->addText("name", "Name")->setRequired();
$form->addTextArea("descriptionShort", "Short description");
$form->addText("ean", "EAN");
$form->addText("productNumber", "Product number");
$form->addText("barcode", "Barcode");
$form->addTextArea("description", "Description");
$form->osSuccess[] = [$this, "processForm"];
return $form;
}
public function processForm(Form $form, array $data)
{
try {
} catch (\Exception $e) {
$form->addError($e->getMessage());
return;
}
$this->onSave($this, $data);
}
}
factory
<?php
namespace App\Components\ItemEditForm;
use App\Components\CategoryTree\ItemEditControl;
interface ItemEditFormFactory
{
function create(): ItemEditControl;
}
- Marek Znojil
- Člen | 84
Ahoj,
viz:
https://doc.nette.org/…n/components#…
v metodě render() komponenty uvedeš latte soubor, kde máš formulář předpřipravený a pak jí celou vykreslíš v šabloně pro akci prezenteru {control itemEditForm}.
- Fires
- Člen | 97
Marek Znojil napsal(a):
Ahoj,
viz:
https://doc.nette.org/…n/components#…v metodě render() komponenty uvedeš latte soubor, kde máš formulář předpřipravený a pak jí celou vykreslíš v šabloně pro akci prezenteru {control itemEditForm}.
Jo to je mi jasné ale pokud má například formulář v headeru stránky tlačítka nebo další prvky nemohu poté požít právě {control itemEditForm} protože se nejedná o různá místa na stránce. Vícenásobné vykreslení komponenty pro formulář asi taky nebude fungovat když by se jednalo o více šablon. např: {control itemEditFrom:header} {control itemEditForm:body}
Editoval Fires (15. 1. 11:51)
- Pavel Kravčík
- Člen | 1194
Formulář rozdělený samozřejmě být nemůže (může ale to neřešíme IMHO). Tak záleží co to je, ale teoreticky třeba odesílací tlačítko můžeš udělat přes JS a část komponenty, která to JS bude volat. A bude to třeba jen signál nebo JS.
- Fires
- Člen | 97
Pavel Kravčík napsal(a):
Formulář rozdělený samozřejmě být nemůže (může ale to neřešíme IMHO). Tak záleží co to je, ale teoreticky třeba odesílací tlačítko můžeš udělat přes JS a část komponenty, která to JS bude volat. A bude to třeba jen signál nebo JS.
Ok díky, takže tlačítka vykreslím zválšť a přes JS submitnu form. Díky za info
- Fires
- Člen | 97
Měl bych ještě jeden teoretický dotaz. Mám stránku na které se upravuje „věc/item“, ten je řazený do kategorii a má připojené obrázky. Aktuálně mám komponentu která se stará o zobrazení stromu kategorii, a komponentu která zobrazuje tedy formulář. Nevím ale jak to spojit celé dohromady tak aby bylo možné item řadit do kategorii a přidat mu i obrázky. Poradíte jaký je správny návrh ? Díky předem