Formulář jako komponenta s manuálním vykreslením

Fires
Člen | 97
+
0
-

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 | 90
+
0
-

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
+
0
-

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 | 1195
+
0
-

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
+
0
-

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
+
0
-

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