control form predani hodnoty do tovarnicky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Turbo
Člen | 24
+
0
-

Zdravim panove,
mam na vas prosbu potrebuji poradit jak predat z neco.latte do tovarny hodnotu.
Mam neco.latte v nem {control necoForm} a potrebuji to upravit na {control necoForm(hodnota)} je to jen navrh jak to asi udelat.Proc to vubec takhle chci pouzivam form na vice mistech a nektere inputy nechci aby se vykreslili form rendruji rucne v componete vlasnim latte.diky za rady.

premek_k
Člen | 172
+
0
-

Mohlo by fungovat

	{control necoForm $value}

vyzkoušej.

Edit: Z důvodů uvedených níže toto nepoužívejte.

Díky @CZechBoY za opravu mého řešení.

Editoval premek_k (9. 3. 2016 13:20)

CZechBoY
Člen | 3608
+
0
-

Nemůžeš z toho formuláře udělat potomky? Případně si do továrničky předat parametry jako showName, showPassword, …

public function __construct (array $args = [])
{
	$this->args = $args;
}
protected function createComponentForm ()
{
	$form = new Form;
	if (!empty($this->args['showName'])) {
		$form->addText('name');
	}
	return $form;
}
public function render ()
{
	$this->template->args = $args;
	$this->template->render();
}

Pokud používáš ruční render tak třeba takto:

<form n:name="form">
	{if !empty($args['showName'])}
		{label name/}{input name}
	{/if}
</form>

@premek_k Předávat parametry do {control} není moc dobrej nápad. Pokud invaliduju snippet v té komponentě tak se nepředají parametry z toho {control} nadřazeného volání (třeba v šabloně presenteru).

Editoval CZechBoY (8. 3. 2016 20:51)

Turbo
Člen | 24
+
0
-

Tohle neni spatnej napad, ale jak dostanu do konstruktoru tu hodnotu?

CZechBoY
Člen | 3608
+
0
-

Tam, kde tu komponentu vytváříš – v presenteru nebo jiné komponentě.

Turbo
Člen | 24
+
0
-

neco.latte

{control addInvoices}

InvoicPresneter.php

<?php
	protected function createComponentAddInvoices()
    {
        $form = new \App\Components\Form\NewInvoicesForm($tady pridat co potrebuji dostat do konstructoru);
        $form['newInvoicesForm']->onSuccess[]=  $this->AddInvoicesSucceeeded();
        return $form;
    }
?>

NewInvoicesForm.php

<?php
class NewInvoicesForm extends UI\Control
{
	tady bude
	__constructor($neco)

	public function render()
   {
       $template = $this->template;
		$template->neco = $this->neco; ///tady pridat z __constructoru
       $template->render(__DIR__.'/NewInvoicesForm.latte');

   }samozrejme do NewInvo....latte bude podminka pri rucni generovani formu

	protected function createComponentNewInvoicesForm()
    {
       //tady podminka pro generovani form prvku samoyrejme u daneho prvku....

        $form = new UI\Form;

		###prvky formu
		return $form
	}
a v neonu registrovani.
}
?>

Editoval Turbo (9. 3. 2016 0:06)

CZechBoY
Člen | 3608
+
0
-

Jeste pridej tovarnicku.
Typicky (pozor, pridej php anotaci return):

interface INewInvoicesFormFactory
{
    /**
     * @return NewInvoicesForm
     */
    function create();
}

Tohle potom zaregistruj jako sluzbu a vyzadej v presenteru.
Taky jsem si vsiml, ze v predenteru, v createComponent mas onSuccess[] = a volani funkce. Mel bys tam mit jakoby jen odkaz na tu funkci:

$form->onSuccess[] = $this->invoiceSucceeded;

Nebo ta metoda vraci callback?

Editoval CZechBoY (9. 3. 2016 8:50)