Sablony v nette

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

zdravim tak nejak zacinm s nette a skousim ruzne veci a funkce. Protoze pouzivam sablony tak jako prvni jsem zkusil sablony , ale nefunguji
vytvoril jsem sablona.phtml
a index.php a do nej napsal tento kod , jen na zkousku

require('nette/loader.php');
Debug::enable();
$template = new Template;
// nastavíme cestu k šabloně
$template->setFile('sablona.phtml');
// nastavíme parametry
$template->hello = 'Hello World';
$template->render();

a sablona

<p><?php echo $hello ?></p>

vypise to ale chybu

File: S:\http\nette\core\Environment.php   Line: 323
Line 323:                throw new InvalidStateException("Unknown environment variable '$var'.");

presne takhle je to popsany tady
akorad ze tam zapomnel dopsat ten render(); bez neho se objevi bila stranka.
navody nejsou tedy moc dobre napsane kdyz tam chybi veci jako je render()
Dalsi vec, koukal jsem do API reference a vsechno je tam popsany anglicky , byl jsem rad ze je konecne nakej ceskej framework a nakonec udelate anglicky manual.
Priklad
bool
remove (mixed $item)
Removes the first occurrence of the specified element.
dole je vysvetlivka , proc neni napsana cesky.
Problem u tech frameworku je ze clovek chce s nejakym zacit , nevi s jakym tak musi postupne vssechny zkouset jeden po druhym , ale kdyz s nima nema moc zkusenosti tak vybira framework kde je dobre napsanej manual. Uvital bych manual napsanej v cestine pro ty aby se mohli hned na zacatku chytnout a pochopily jak to funguje. Manual krok za krokem treba takovej nejakej jednoduchej blok s vytvorenim 1 stranky , zmenou sablony , multijazykem a prihlasenim useru, admina. Kdyz takhle clovek jede podlöe toho vaseho manualu a narazi hned na zacatku na problem jako ja s tema sablonama tak ho to odradi. Jinak Grundlovi drzim palce, je to frajer ze dokaze napsat takovejhle framework. Urcite toho ma moc , tak mu prosim pomozte s manualem.

Editoval dehtak (6. 12. 2009 11:52)

pave.kucera
Člen | 122
+
0
-

Nejsem si teď úplně jistý, jestli to pomůže, ale zkus přemístit volání metody setFile až těsně před volání metody render, takže by pak kód vypadal takto:

<?php
require('nette/loader.php');
Debug::enable();
$template = new Template;
// nastavíme parametry
$template->hello = 'Hello World';
$template->setFile('sablona.phtml');
$template->render();
?>
Panda
Člen | 569
+
0
-

Dokumentace je skutečně slabou stránkou frameworku, nicméně věci se mají trochu jinak, než se na první pohled zdá.

Dokumentace je psaná pro použití celého Nette Frameworku jako celku, nikoliv pro samostatné použití jednotlivých součástí. Volání $template->render() na stránce skutečně být nemá, protože se o její zavolání ve správný čas postará samotný Presenter. U šablon se moc nepočítá s použitím mimo Nette aplikaci (aplikací se rozumí aplikace řízená třídou Application, nikoliv jen aplikace s načteným frameworkem), neboť jsou docela těsně navázány na samotné prostředí Nette – šablony používají cache, do které se uloží „přeložená“ šablona, aby se při každém zobrazení stránky nemusela šablona znovu procházet a prohánět filtry (viz LatteFilter). K tomu, aby toto cachování mohlo správně fungovat, musí být prostředí správně nastavené, tzn. nadefinované správné konstanty, vytvořené určité složky…

Pokud si chceš uvedený příklad spustit, můžeš použít jednoduchý trik: ve složce s index.php vytvoř zapisovatelnou složku temp a na začátek souboru index.php přidej řádek

define('APP_DIR', dirname(__FILE__));

Ten řekne frameworku, že složku pro dočasné soubory (tedy vytvořený temp) má hledat ve složce se současným scriptem. Cachování se bohužel při mých testech nepoužilo, což pravděpodobně bude způsobené neúplným nastavením Nette aplikace (nezkoumal jsem), ale příklad se spustí bez problémů.

Pro začátek s Frameworkem bych doporučil seriál na zdrojáku a starý quick start. Zdroje bohužel nejsou moc aktuální, nicméně základ zůstal stejný.

Na závěr bych Tě chtěl přivítat mezi Nettaři a pokud budeš mít jakékoliv otázky, klidně se ptej. Doufám, že budu mluvit za celou komunitu, když řeknu: vždy rádi pomůžeme!

LM
Člen | 206
+
0
-

Aby se šablony nepokoušeli řešit závislosti po svém, stačí jim nastavit CacheStorage:

$template = new Template;
$template->setCacheStorage(new FileStorage('cesta/k/temp/adresari'));
$template->setFile(... // atd