výpis proměnné pomocí šablony

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

NetteFramework-2.0.10-PHP5.3,

Dobrý den,
zasekl jsem se na nějaké kravině, nedaří se mne zobrazit proměnou pomocí šablony.

	protected function createComponentEditaceForm()
	{

		$user = $this->getUser();
	/*	echo $user->getIdentity()->username;*/
		echo $this->id;
		$this->template->sklads = $this->context->createSklads()->get($this->id);
	/*	echo ($this->template->sklads->nazev);*/

		$form = new Form();


		$form->addSelect('id', 'Výpis barev:', $this->context->database->table('barva')->order('typbarva ASC')->fetchPairs('id', 'typbarva'));
		$form->addText('typbarva', 'Nový druh barvy:', 50, 100)
/*			->setDefaultValue($user->getIdentity()->username)*/
			->addRule(Form::FILLED, 'Je nutné zadat druh barvy.');

		$form->addSubmit('set', 'Uložit data');
		$form->onSuccess[] = callback($this, 'editaceFormSubmitted');


		return $form;
	}

Potřebuji zobrazit v html obsah proměné $this->template->sklads->nazev

zápis v šabloně

{var $title = ‚Editace barvy, písma, a textu štítku‘}

{block content}

<h1>Editace barvy, písma, a textu štítku. </h1>

{var $pokuss = ‚Pokus:‘}
{$pokuss}

<table>
{form editaceForm}
<div class=„editace-form“>
{control $form errors}
<tr><div class=„pair“>

<td>{$sklads->nazev}</td>
laděnka hlásí, že nezná proměnnou $sklads->nazev

<td>{label typbarva /}</td>
<td><div class=„input“>{input typbarva}</div></td>
</div></tr>
<tr class=„odd“><div class=„pair“>
<td></td><td><div class=„input“>{input set}</div></td>
</div></tr>
</div>

{/form}
</table>

{/block}

nevím kde dělám chybu.

Předem děkuji za radu.

mr.mac
Člen | 87
+
0
-

Karel Chramosil napsal(a):

Můžeš tu latte šablonu naformátovat jako html, bude se to lépe číst.
Jinak šabloně se předává proměnná v render metodě presenteru, ne v továrničce.

Editoval mr.mac (8. 12. 2013 15:55)

Karel Chramosil
Člen | 114
+
0
-

Moc děkuji za radu.

Karel Chramosil

elevate
Člen | 31
+
0
-

Proměnné v šablonách se „předávájí“ renderováním šablony, ale továrničky jsou v Nette „lazy“, což znamená, že komponentu vytvoří až když je potřeba.

Což znamená:

  1. „předají“ se proměnné
  2. vykresluje se šablona dokud nenarazí na komponentu
  3. komponenta – volá se fce createComponentXY, ale proměnná sklads už se ti „nepředá“, tudíž neexistuje.

Takže buď si vytvoříš a tím nastavíš vlastnost sklads šabloně ještě před renderováním.
V presenteru:

public function render<action>()
{
	$this["editaceForm"]; //stačí, protože zavolá metodu getComponent, která pak createComponent
}

nebo si pro proměnnou sáhneš přímo do šablony
v šabloně:

{$template->__get("sklads");
// bude fungovat nejdříve po volání {form editaceForm} nebo {control editaceForm}

Oboje možnosti vřele nedoporučuju :-).

Jak říká mr.mac ideálně předávat v metodě render.