undefined $basePath v templatu z db

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

cus,

nemuzu se pohnout od nasledujiciho:

pouzivam nette 2.0 beta, php 5.3

Homepage:default

$template = new \Nette\Templating\FileTemplate(__DIR__.'/../templates/Homepage/obsah.latte');
$template->registerHelperLoader('\Nette\Templating\DefaultHelpers::loader');
$template->registerFilter(new \Nette\Latte\Engine);
$template->text = $data; // objekt z DB; $data->text obsahuje napriklad promennou {$basePath}
$template->render();

jednoduse receno, v DB mam obsah sablony, ktery doplnuji do obsah.latte

aktualne to chcipne na: Undefined variable: basePath

predem diky za nejake reseni/radu

voda
Člen | 561
+
0
-

Tak musíš tu proměnnou (basePath) do tý šablony nastavit:

$template->basePath = ...;
hury
Člen | 56
+
0
-

To jsem zkousel, pak to zase pise undefined control, a nakonec Call to a member function link()

neni tam treba nasadit nejaky filtr? nebo neco takoveho? aby se to rozjelo…

Filip Procházka
Moderator | 4668
+
0
-

To není chyba Nette, ale tvoje. Šablona toho potřebuje docela dost. Nejjednodušší řešení je, nechat si ji vytvořit od nějakého Presenteru, nebo Controlu.

$template = $this->createTemplate()
	->setFile(__DIR__ . '/../templates/Homepage/obsah.latte');

$template->text = $data;
$template->render();
hury
Člen | 56
+
0
-

Diky za odpoved,
je mi jasne, ze to neni chyba Nette… vim, ze to mam blbe ja :-)

tvoje reseni se mi sprovoznit bohuzel nepovedlo, ale napadlo me jine trivialni reseni…

vlastne jsem potreboval vymenit jen {$basePath}, tak jsem udelal str_replace

Filip Procházka
Moderator | 4668
+
0
-

To je otřesné řešení… Co ti to psalo za chybu, když jsi použil můj kód?

nanuqcz
Člen | 822
+
0
-

HosipLan: V nadpisu je „v templatu z DB“, on asi používá StringTemplate

Filip Procházka
Moderator | 4668
+
0
-

V tom případě takto…

$this->createTemplate('Nette\Templating\Template')->setSource($data)->render();
hury
Člen | 56
+
0
-

xxxObiWan: cely template nemam v DB, ale jen textovy obsah… zbytek je normalne v obsah.latte,

HosipLan: v prvni rade se neprovedl startUp BasePresenteru, kde si vytvarim $menu, tak jsem $menu dosadil rucne.

Pak se nepovedlo $this->createTemplate()->setFile(__DIR__ . '/../templates/Homepage/obsah.latte');, protoze mi to pise:

Page not found. Missing template ‚…/web/app/FrontModule/templates/Homepage/testObsahu.latte‘

dal jsem to nezkousel, nevim bohuzel jak

Filip Procházka
Moderator | 4668
+
0
-

Vždyť je to zcela jasné.

Když si text chyby přeložíš, zjistíš, že ti oznamuje, že neexistuje soubor …/web/app/FrontModule/templates/Homepage/testObsahu.latte který tomu nutíš.

hury
Člen | 56
+
0
-

to mi jasne je, ale to bych tady nemusel resit, jak to udelat bez standardni latte sablony pro kazdou stranku.

diky za tvuj cas

asi neumim vysvetlit problem…

Filip Procházka
Moderator | 4668
+
0
-

Řešení jsem ti už napsal

$this->createTemplate('Nette\Templating\Template')->setSource($data)->render();

případně výsledek můžeš ukládat do proměnné

// vyrenderovaná šablona z databáze
$this->template->text = $this->createTemplate('Nette\Templating\Template')->setSource($data);

a v šabloně presenteru vypisovat jako

{block #content}
<div id="obsah">
	{!$text->render()}
</div>

Editoval HosipLan (29. 7. 2011 13:16)

hury
Člen | 56
+
0
-

super, DIKY MOC

jaksi jsem nepredal vytvoreny template do templatu… takze nyni uz to vse jede presne dle ocekavani :-)