výpis proměnné pomocí šablony
- Karel Chramosil
- Člen | 114
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.
- elevate
- Člen | 31
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á:
- „předají“ se proměnné
- vykresluje se šablona dokud nenarazí na komponentu
- 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.