checkboxlist container | proměná formulář

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
masterr
Začátečník | 141
+
0
-

presenter:

$con = $form->addContainer('sel');
$parameters=dibi::query('SELECT * FROM [shopmaster_goods_parameters] ORDER BY id DESC') ;
foreach ($parameters as $parameter) {

         $items = dibi::query('SELECT id,hodnota FROM [shopmaster_goods_parameters_base] where p_id='.$parameter->id.'')
         ->fetchPairs('id','hodnota');
          $i++;
          $con->addCheckboxList('selected'.$i.'', '', $items)   ;


}

šablona:

{foreach $form['sel']->controls as $item}<tr><td width="90">{$item->label}:</td><td> {$item->control}</td></tr>{/foreach}

Nic mi to nezobrazí, proč?

	protected function createComponentAddgoodsForm()
	{
		$form = new AppForm;
$i=3;
$this->template->icko=$i;

}

šablona:

{!icko}

Undefined variable icko. Jak se to má napsat? Může to být v tom formu?THX

Čelo
Člen | 42
+
0
-

Možná by se ti hodilo toto:
https://forum.nette.org/…ni-formularu
a pokud něco předáváš do šablony:

$this->template->icko=$i;

tak v šabloně musíš volat přes

{$icko} nebo neescapovane {!$icko}

Editoval Čelo (24. 10. 2010 18:45)

masterr
Začátečník | 141
+
0
-
$this->template->icko=$i;

tak v šabloně musíš volat přes

{$icko} nebo neescapovane {!$icko}

Takle jsem to napsal hned na začátku a furt to hazí Undefined variable: icko.

Čelo
Člen | 42
+
0
-

neměl bys to ale takhle volat v té tovarničce „createComponentAddgoodsForm“

Editoval Čelo (25. 10. 2010 12:05)

masterr
Začátečník | 141
+
0
-

To jsem si myslel, a můžu to nějak volat v ty tovarničce?Nebo to v ni nejde vůbec?

westrem
Člen | 398
+
0
-

V tovarnicke sice mozes nastavovat premenne v sablone, ale zaroven musis ratat s tym, ze sa nastavia len vtedy ked budes danu komponentu zobrazovat (tzn dana metoda sa aj zavola).

masterr
Začátečník | 141
+
0
-

To je mi jasné, je to logické. Mám to tak nebo si to alespon myslím …Mýlím se?

{control addgoodsForm begin}
{control addgoodsForm errors}
{assign form => $control['addgoodsForm']}
{!$icko}
	protected function createComponentAddgoodsForm()
	{
		$form = new AppForm;
		$this->template->icko=5;
 $form->addSubmit('ok', 'Uložit');
		$form->onSubmit[] = callback($this, 'addgoodsFormSubmitted');
		return $form;
}
  • se mi eště pls koukni na ten container, proč nejde použít s checkboxlist nebo jak ho mám pak vypsat v šabloně?

Mám dvě možnosti jak vypsat ty checkboxlisty:

1)Pomocí containeru a foreach, ale neznam tu sysntaxy na zobrazeni v šabloně nebo spíš znám, ale nefunguje mi s checkboxlistem…

2)for cyklem, ale potřebuju tu hodnotu icko dostat do šablony a nějak si jí tam nechce :D

Dík moc

masterr
Začátečník | 141
+
0
-

Pls, help.

Solution
Člen | 50
+
0
-

Tady je problém, že když se vytváří komponenta, tak je už dávno template registrovaná, tu propertii do ní sice uložíš, ale už si ji nemůžeš vypsat, od toho jsou render metody.
Zkus zneužít flash messages, pokud to opravdu nutně potřebuješ takto mít.

Editoval Padik (29. 10. 2010 11:17)

westrem
Člen | 398
+
0
-

A preco jednoducho nevypises dany container?

{= echo $form['sel']}
Bertram
Člen | 75
+
0
-

A nemohl by jsi připojit komponentu formuláře už v metodě actionNeco() ?

public function actionNeco()
  	{
  	 $form = $this['addgoodsForm'];
  	}
Pak by podle mého plnění šablony z komponenty mělo fungovat.
jasir
Člen | 746
+
0
-

createComponentXXX se volá, až když je daná komponenta potřebná, u formulářů tedy klidně až během renderování šablony. Když si na komponentu šáhneš manuálně v renderXXX:

<?php
	$dummyForm = $this['myForm'];
?>

tak se továrnička vyvolá a to tvoje plnění proměnné do Template proběhne před renderováním šablony
a proměnná tak bude k dispozici. Jestli ale cpát proměnné do šablony v createComponentXXX je dobrý nápad
nechávám na tobě…

masterr
Začátečník | 141
+
0
-

westrem napsal(a):

A preco jednoducho nevypises dany container?

{= echo $form['sel']}

syntax error, unexpected T_ECHO, expecting ‚)‘, když tam doplním středník tak to stejně hazí syntax error, ikdyž ten v tom makru asi být nemá, že?

jansfabik
Člen | 193
+
0
-

mělo to být spíš:

{!$form['sel']}
masterr
Začátečník | 141
+
0
-

jansfabik napsal(a):

mělo to být spíš:

{!$form['sel']}

Object of class FormContainer could not be converted to string.

arron
Člen | 464
+
0
-

Tak nevim jestli uz jsi to vyresil nebo ne, nicmene co se to checkboxlistu tyka, tak rozhodne pres foreach tak, jak to mas v prvnim prispevku. Proc Ti z te tovarnicky nejde vlozit promena do sablony uz tu zaznelo, jaky je problem s vypsanim toho checkboxlistu nikoliv, na prvni pohled se mi nezda, ze by tam byla nejaka chyba.

masterr
Začátečník | 141
+
0
-

Myslíš takto?

{foreach $form['sel']->controls as $item}<tr><td width="90">{$item->label}:</td><td> {$item->control}</td></tr>{/foreach}

To jsem nevyřešil, protože to nic nevypíše. Zdá se mi jako kdyby ten container nešel použít s checkboxlistem. To schválně vyzkoušej, když budeš mít chvilku.

Edit:Už jsem to rozchodil. Sice trošku jinak…

Dík všem za pomoc.

Editoval masterr (1. 11. 2010 21:44)