jak do new Latte\Engine() dostat vychozi makra a filtry nette?

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

Ahoj,

tusi nekdo jak do nize uvedeneho pridam idealne vsechny latte makra a filtry z nette?

$latte = new Engine();
$latte->onCompile[] = function($latte) {
    //filtry a makra pridam asi tady, otazka je jak?
};
$latte->render(__DIR__ . '/../templates/Home/page.latte', $parameters);

Kdyz pouziju vyse uvedeny kod a v page.latte pak pridam napriklad {control nejakycontol}, vrati to
„Unknown macro {control} “

Diky za rady

@flexroad

enumag
Člen | 2118
+
+3
-

Nepoužívej new Engine, místo toho si injectni službu Nette\Bridges\ApplicationLatte\ILatteFactory případně rovnou Nette\Application\UI\ITemplateFactory.

Editoval enumag (8. 8. 2015 11:07)

Jan Endel
Člen | 1016
+
0
-

Ahoj flexi,
nejejednoduší budeš mít život, když použiješ Nette\Bridges\ApplicationLatte\TemplateFactory a nad tím metodu createTemplate má bohužel docela hodně závislostí, ale většina z nich je nepovinná.

flexroad
Člen | 117
+
0
-

OK. Zmenil jsem na ILatteFactory… Nize uvedeny kod ale vraci chybu „Undefined variable: _control“

/** @var Nette\Bridges\ApplicationLatte\ILatteFactory @inject */
public $latteFactory;

        $parameters = array('records'=>$postsRecords);
        $latte = $this->latteFactory->create();
        Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
        $latte->render(__DIR__ . '/../templates/Home/page.latte', $parameters);

Co delam spatne?

@flexroad

enumag
Člen | 2118
+
0
-

V podstatě to že nepoužíváš TemplateFactory: https://api.nette.org/…ory.php.html#92

flexroad
Člen | 117
+
0
-

@JanEndel : Diky moc!!! ,ale stejne moc nevim, jak tomu ty zavislosti predat…

Nize uvedene mi pro zmenu vraci:

Call to a member function getComponent() on a non-object na tomto radku…

} elseif ($record->type == "post") { $_l->tmp = $_control->getComponent("contentPanel"); if ($_l->tmp instanceof Nette\Application\UI\IRenderable) $_l->tmp->redrawControl(NULL, FALSE); $_l->tmp->renderItem($item) ;} $iterations++; }
	        $template = $this->templateFactory->createTemplate();
$template->setFile(__DIR__ . '/../templates/Home/page.latte');
$template->records = $postsRecords;
$template->render();

--edit–
V presenteru mam pochopitelne komponentu „contentPanel“ normalne vytvorenou:

protected function createComponentContentPanel()
{
    $control = $this->contentPanelFactory->create();
    return $control;
}

Jen nevim, jak to predat templateFactory… :( Uz nad tim sedim asi tri hodiny a me dlouhe kucerave vlasy zacinaji slusne sedivet … GRRR.

Editoval flexroad (8. 8. 2015 11:46)

enumag
Člen | 2118
+
0
-

Musíš metodě createTemplate předat komponentu – rodiče té kterou chceš vykreslit makrem control.

flexroad
Člen | 117
+
0
-

@enumag

Poradis PROSIM jak?
Jak uz jsem doplnil v postu vyse, komponentu vytvarim v presenteru…

protected function createComponentContentPanel()
{
    $control = $this->contentPanelFactory->create();
    return $control;
}

Jen nevim, jak ji predat templateFactory :(

DIKY MOC ZA VAS DRAHOCENY CAS!!!

enumag
Člen | 2118
+
0
-

Když komponentu vytváříš v presenteru tak té metodě createTemplate musíš předat ten presenter. ;-)

flexroad
Člen | 117
+
0
-

@enumag : Jsem LAMA! Uz to jede! DIKY JESTE JEDNOU!!!

@flexroad