Modulová struktura a @layout

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

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)

Foowie
Člen | 269
+
0
-

Smazat temp?

dj.kure
Člen | 70
+
0
-

Foowie napsal(a):

Smazat temp?

To jsem samozřejmě dělal několikrát (lépe řečeno několikrát set). Nechápu co mu vadí.

Ještě jsem možná zapomněl popis prostředí = nette 1.0a + php5.3

Editoval dj.kure (14. 7. 2010 21:40)

Foowie
Člen | 269
+
0
-

A můžeš sem hodit strukturu layoutu a templatu ? (alespoň extends, bloky, includy apod) + jestli nějak upravuješ createTemplate v presenteru … ?

Aurielle
Člen | 1281
+
0
-

Blbá rada (nevím jak je to v 1.0), ale protected $oldModuleMode = FALSE; protected $oldLayoutMode = FALSE; ?

Michalek
Člen | 210
+
0
-

Máš v @layout.phtml
{include #content}
a v šabloně
{block #content}
?

Foowie
Člen | 269
+
0
-

Respektive máš v šabloně {extends @layout.phtml} ?

dj.kure
Člen | 70
+
0
-

Michalek napsal(a):

Máš v @layout.phtml
{include #content}
a v šabloně
{block #content}
?

Pokud to předělám přesně jak píšeš, tak mi zmizí obsah šablony, ale ve zdrojáku se alespoň vypíše hlavička :-)

dj.kure
Člen | 70
+
0
-

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)

dj.kure
Člen | 70
+
0
-

Nikoho nic nenapadá ?

Michalek
Člen | 210
+
0
-

Asi by to chtělo aspoň krátkou ukázku těch souborů a kde to v nich je. Co #5?

Blizzy
Člen | 149
+
0
-

Nepřepisuješ některé metody presenterů? (a nezapomínáš u přepsaných volat rodiče?)

EDIT: Nepoužíváš setLayout nebo nějaké nastavení layoutu?

Editoval Blizzy (16. 7. 2010 16:48)

Pavel S.
Člen | 24
+
0
-

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)

Pavel S.
Člen | 24
+
0
-

Tak jsem si s tím ještě zkoušel hrát a zjistil jsem, že když přesunu @layout.phtml na „nejvyšší“ úroveň, hned do adresáře templates, potom vše funguje jak má. Jak potom ale zařídit, aby každý modul „nejvyšší“ úrovně (v mém předchozím příkladu HlavniModule) měl svůj layout?

newPOPE
Člen | 648
+
0
-

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
+
0
-

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)

crempa
Člen | 198
+
0
-

Ahoj, mam stejny problem s posledni 2.0 alphou, nejake reseni v tomto smeru ?

SyXcz
Člen | 75
+
0
-

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