Modulová struktura a @layout
- dj.kure
- Člen | 70
Ahoj lidi,
narazil jsem na zajímavý problém. V mé aplikaci se nepoužijí $layout
soubory, které prokazatelně existují.
Projekt má klasickou modulární strukturu:
app/
modul1/
presenters/
templates/
@layout.phtml
...pokracovani klasika
modul2/
...
modulN/
O co mi jde. Pokud zobrazuju /modul1/homepage/default a ostatní presentery/akce v nějakém modulu, tak se nepoužije žádný layout. Zkoušel jsem i přejmenovat defaultní název modulu na „a“. Dokud jsem nepřejmenoval /modul1/templates/@layout.phtml na @a.phtml, tak Nette házelo chybu, že layout neexistuje. Po přejmenování přestalo, což svědčí o faktu, že se layout v pořádku nalezne. Ale jen se nepoužije. Nenapadá mi opravdu proč.
Napadly mě špatné routy. Ale Laděnka mi tento fakt vyvrátila.
Nejedná se náhodou o bug?
Díky za pomoc :)
Editoval dj.kure (14. 7. 2010 18:33)
- dj.kure
- Člen | 70
Foowie napsal(a):
Respektive máš v šabloně {extends @layout.phtml} ?
Vypíše chybu:
Missing template file '/home/petr/NetBeansProjects/BpVoucherSystem/document_root/../app/ResellerModule/templates/Homepage/@layout.phtml'.
Když dám {extends ../@layout.phtml}, tak se stane stejný případ jako v minulém příspěvku (tzn, nezobrazí se obsah šablony, ale hlavička se vypíše).
Editoval dj.kure (16. 7. 2010 10:41)
- Pavel S.
- Člen | 24
Zdravím,
narazil jsem na podobný problém. Používám starou adresářovou strukturu a moduly, vypadá to takto:
--presenters
--HlavniModule
--NejakyPresenter.php
--VnitrniModule
--DalsiPresenter.php
--DruhyModule
........
--templates
--HlavniModule
--Nejaky
--default.phtml
--VnitrniModule
--Dalsi
--cosik.phtml
--DruhyModule
........
--@layout.phtml
Při renderování v presenteru Nejaky
se v pořádku použije
hlavní layout a stránka se zobrazí jak má. Pokud ovšem totéž dělám ve
„vnořeném“ modulu, tedy z mojeho příkladu Dalsi
, layout
už se nepoužije a stránka se zobrazí „holá“, bez hlaviček a
podobných, které jsou právě v hlavním layoutu.
Čím může být tento problém způsoben? A jak ho snadno vyřešit, aniž bych musel explicitně do každé šablony psát cestu k souboru @layout.phtml? V quickstartu jsem se dočetl, že „Nette automaticky zařídí, že všechny šablony view dědí od layoutu. Pokud byste chtěli dědit od jiné šablony, musíte použít makro {extends …}.“ Tohle ale, jak se zdá, moje aplikace tak úplně nerespektuje. Proč?
Problém se objevil naprosto znenadání a vůbec nechápu, čím je
způsoben (nejdivnější je, že ještě před pár dny vše fungovalo). V
@layout.phtml se na patřičném místě odkazuju na vkládaný blok
z šablony pomocí @{include #content}
, oba templaty pak vypadají
téměř identicky:
{block #content}
a následně obsah.
Předem díky za veškeré tipy, rady a nápady.
Editoval Pavel S. (29. 7. 2010 1:19)
- newPOPE
- Člen | 648
gmvasek napsal(a):
Blbá rada (nevím jak je to v 1.0), ale
protected $oldModuleMode = FALSE; protected $oldLayoutMode = FALSE;
?
ja tam mam a vsetko fici ako ma, verzia 0.9.(5|4), protected
som
tam nikdy neskusal
<?php
public $oldLayoutMode = FALSE;
public $oldModuleMode = FALSE;
?>
moduly su asi tak ze v hlavnom /templates je layout ktory ma len HTML hlavu
a patu inak kazdy modul svoj layout
a {extends ../../templates/@layout.phtml}
Editoval newPOPE (29. 7. 2010 10:29)
- Mas3r
- Člen | 116
dj.kure napsal(a):
Ahoj lidi,
narazil jsem na zajímavý problém. V mé aplikaci se nepoužijí $layout soubory, které prokazatelně existují.
Projekt má klasickou modulární strukturu:app/ modul1/ presenters/ templates/ @layout.phtml ...pokracovani klasika modul2/ ... modulN/
O co mi jde. Pokud zobrazuju /modul1/homepage/default a ostatní presentery/akce v nějakém modulu, tak se nepoužije žádný layout. Zkoušel jsem i přejmenovat defaultní název modulu na „a“. Dokud jsem nepřejmenoval /modul1/templates/@layout.phtml na @a.phtml, tak Nette házelo chybu, že layout neexistuje. Po přejmenování přestalo, což svědčí o faktu, že se layout v pořádku nalezne. Ale jen se nepoužije. Nenapadá mi opravdu proč.
Napadly mě špatné routy. Ale Laděnka mi tento fakt vyvrátila.
Nejedná se náhodou o bug?
Díky za pomoc :)
Mam uplne stejny problem po prechodu z 0.9.X na 1.0 aplha. Layout to najde, jen ho to nevykresli. To mam do kazdeho templatu u presenteru davat {extends} ? Predtim to slo automaticky.
Diky za odpoved
Editoval Mas3r (2. 9. 2010 14:48)
- SyXcz
- Člen | 75
crempa napsal(a):
Ahoj, mam stejny problem s posledni 2.0 alphou, nejake reseni v tomto smeru ?
no je to zvláštní ale já mam teď nejnovější 2.0 pro php 5.3 s namespace a moduly mi jedou bez problémů…
zkouel ses dívat do examples? tam by mělo bejt nějaký demo s modulama, a pokud to v něm bude fungovat, musí bejt chyba jinde