NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
solta
Člen
Avatar
solta:21.8.2016 22:33

ahoj potřeboval bych vytvářet formuláře dynamicky na stránce a zároveň do nich vkládat data doufal jsem že by mohlo fungovat toto
Presenter

function createComponentTitleForm() {
        return new Multiplier(function ($imageId, $title) {
            $form = new Form;
            $form->addText('title', 'Title:')->setRequired()->setValue($title);
            $form->addHidden('gallery_image_id', $imageId);
            $form->addSubmit('send', 'Ulozit');
            return $form;
        });
    }

Šablona

{control titleForm-$image->id, $image->title}

ale vyhodí to chybu Value must be scalar or NULL, object given in field 'title'
neví někdo co s tím

 
Odpovědět
21.8.2016 22:33
Avatar
Odpovídá na solta
Martin Konečný (pavelco1998):21.8.2016 22:36

zdar,
můžeš tam předávat jen tu jednu hodnotu, pokud vim. Ve tvém případě by asi bylo lepší vytvořit si doslova komponentu, které to pak nacpeš do render() metody.

Nahoru Odpovědět
21.8.2016 22:36
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
solta
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
solta:22.8.2016 21:27

Díky jsem s nette v začátcích a tak nějak nechápu co tím myslíš

 
Nahoru Odpovědět
22.8.2016 21:27
Avatar
Martin Konečný (pavelco1998):22.8.2016 21:37

Asi něco takovýho (psáno z hlavy)

class GalleryFormControl extends Nette\Application\UI\Control
{

        public function render($imageId, $title)
        {
                $this["galleryForm"]->setDefaults(array(
                        "gallery_image_id" => $imageId,
                        "title" => $title
                ));

                $this->template->setFile("default.latte");
                $this->template->render();
        }


        public function createComponentGalleryForm()
        {
                $form = new Form();
                $form->addText("title", "Title:")
                        ->setRequired();

                $form->addHidden("gallery_image_id");
                $form->addSubmit("send", "Uložit");

                $form->onSuccess[] = array($this, "galleryFormSubmitted");

                return $form;
        }


        public function galleryFormSubmitted(Form $form, $values)
        {
                // your logic
        }

}

V šabloně by ti pak mělo stačit jen to vykreslit

{control galleryFormControl $image->id, $image->title}

V presenteru si to zaregistruješ stejně jako klasický formulář

public function createComponentGalleryFormControl()
{
        return new GalleryFormControl();
}
Nahoru Odpovědět
22.8.2016 21:37
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Dominik Gavrecký:23.8.2016 10:21

Prepáč za mínus missclick

Nahoru Odpovědět
23.8.2016 10:21
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
solta
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
solta:24.8.2016 2:17

můžu tě poprosit ještě o tu šablonu

$this->template->setFile("default.latte");

mě se tam ten formulář nedaří vykresli

 
Nahoru Odpovědět
24.8.2016 2:17
Avatar
Odpovídá na solta
Martin Konečný (pavelco1998):24.8.2016 11:25
{control galleryFormControl $image->id, $image->title}

tohle by mělo stačit. Případně si to můžeš vykreslit manuálně jak chceš (pomocí maker {form}, {input} a {label}, nebo úplně ručně přes n:name atributy).

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
24.8.2016 11:25
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na solta
Dominik Gavrecký:24.8.2016 12:37
{form galleryForm}
{input name}
{\form}
Nahoru Odpovědět
24.8.2016 12:37
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
solta
Člen
Avatar
Avatar
solta
Člen
Avatar
Odpovídá na Dominik Gavrecký
solta:24.8.2016 15:55

i tobě děkuji

 
Nahoru Odpovědět
24.8.2016 15:55
Avatar
solta
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
solta:25.8.2016 0:20

ještě je tam problem s gallery managerem

GalleryFormCon­trol.php

public function galleryFormSubmitted(Form $form, $values) {
        $galleryManager = new  GalleryManager();
        $this->galleryManager->saveImageTitle($values);
        $this->redirect('this');
}

Argument 1 passed to App\Model\Base­Manager::__con­struct() must be an instance of Nette\Database\Con­text, none given, called in D:\work\galery\ap­p\CoreModule\For­m\GalleryFormCon­trol.php on line 37 and defined

BaseManager.php

abstract class BaseManager extends Object {

    protected $database;

    public function __construct(Context $database) {
        $this->database = $database;
    }

}
 
Nahoru Odpovědět
25.8.2016 0:20
Avatar
Odpovídá na solta
Martin Konečný (pavelco1998):25.8.2016 0:24

Tak to pak budeš muset řešit přes továrny, které tu závislost té komponentě automaticky předají.

class GalleryFormControlFactory
{

        private $galleryManager;

        public function __construct(GalleryManager $galleryManager)
        {
                $this->galleryManager = $galleryManager;
        }


        public function create()
        {
                return new GalleryFormControl($this->galleryManager);
        }

}

tu továrnu si zaregistruješ v configu

- Tvuj\Namespace\GalleryFormControlFactory

v presenteru si to pak injectneš automaticky

/**
 * @var Tvuj\Namespace\GalleryFormControlFactory
 * @inject
 */
public $galleryFormControlFactory;



public function createComponentGalleryFormControl()
{
        return $this->galleryFormControlFactory->create();
}

v té komponentě pak dostaneš ten GalleryManager přes konstruktor, uložíš do privátní proměnné a v galleryFormSub­mitted() budeš moct použít $this->galleryManager

Nahoru Odpovědět
25.8.2016 0:24
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.