Ajax problém, render více šablon

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

Ahoj,
v nové beta verzi mám problém u komponenty která při renderu používá více šablon, něco jako:

<?php
$headerTemplate->render();
$contentTemplate->render();
$footerTemplate->render();
?>

při klasickém dotazu je vše OK, ajaxový dotaz a invalidace snippetů v šablonách skončí HTML výstupem a záznamem do logu v podobě InvalidStateException – Cannot send header after HTTP headers have been sent…

Komponenta s jednoduchým

<?php
$template->render();
?>

funguje bez problémů a výše uvedené v alpha verzích chodilo také.

Nějaký nápad, zda dělám něco špatně já a nebo je něco špatně v Nette?

Díky

Editoval crempa (13. 6. 2011 10:38)

crempa
Člen | 198
+
0
-

Nikdo nic?

Nechce se me hned delat bugreport… treba je to jen nejaka moje chyba, kazdopadne to pred tim slo, tak nevim zda to byla jen nahoda a nebo ne… :-)

uestla
Backer | 796
+
0
-

Takže v render() metodě Controlu vytváříš tři různé FileŠablony umístěné ve třech různých souborech, v nichž jsou různě rozmístěny snippety, které pak všelijačně invaliduješ? Aspoň tak jsem si to z nabízených informací poskládal…

crempa
Člen | 198
+
0
-

Presne tak to je, vzhledem k variabilite komponenty je nutne mit jeji grafickou reprezentaci rozdelenou do vice sablon…
Ono by nejspis slo to cele prepsat tak, ze by se pouzila jen jedna hlavni sablona a tri by se v ni pres bloky vkladaly… Klicove ale je, ze neco slo a ted nejde, takze zda to nemuze delat problemy i v jinych pripadech…

uestla
Backer | 796
+
0
-

Troufale si troufnu tvrdit, že je to mírně v rozporu s architekturou – každé komponentě by měla náležet jediná šablona (přesněji FileŠablona), neboť má v sobě zabudovánu továrničku:

$control->getTemplate();

Čili pokud si vytváříš vlastní vedlejší šablony, je to jako bys je používal nezávisle na Frameworku a tipnu si tvrdit, že pak ani AJAX a invalidace snippetů nebude fungovat tak, jak očekáváš.

Je mi přesto divné, že to v minulé verzi fungovalo…

crempa
Člen | 198
+
0
-

mas pravdu, na druhou stranu proc by pak existovalo:

$control->createTemplate()

ktere prave pouzivam…

Aurielle
Člen | 1281
+
0
-

$control->createTemplate() se překvapivě volá při $control->getTemplate() ;)

uestla
Backer | 796
+
0
-

Chápu, jde prostě o to, že jedna komponenta → jedna FileŠablona – ani nevím, je-li správně mít potřebu právě metodu createTemplate() volat v metodě render() – myslím, že ne. Třeba při vytváření šablony pro odesílaný e-mail, to jo, ale to není šablona komponenty, čímžto jsem se zase obloučíčkem vrátil na začátek úvahy…

crempa
Člen | 198
+
0
-

2gmvasek: vsak proc ne, pokud bych ji ale nesmel pouzivat tak predpokladam ze bude private…

Uvahu je mozne vest jinak, rekneme ze potrebuju aby se komponenta renderoval ze trech, souborove oddelenych sablon… tak to je proste potreba, logicky jsem tak dospel k nazoru ze je to nejjednodussi vyresit tak, ze si vytvorim tri instance templatu, nasypu do nich hromadu parametru a postupne si je renderuju, do ted to bylo dva roky bez problemu funkcni…

Nikde jsem nenasel ze by bylo receno „pokud renderujes komponentu musis pouzit jen jednu sablonu“ takze bud je to:

  1. chyba v Nette
  2. nedostatek v dokumentaci
  3. neumim hledat v dokumentaci

Jak jsem jiz vyse uvedl ma dany problem pravdepodobne reseni udelat si jednu rodicovskou sablonu a do ni ty tri proste includovat postupne tak jak je renderuju… to je ale totez v bledemodrem a vzhledem k realizaci komponenty by to ale znamenalo znacne upravy v kodu (je tam navic render do PDF a podobne zalezitosti) a proto bych byl radsi kdyby byla zachovana puvodni funkcnost.

22
Člen | 1478
+
0
-

no já nevím, ale je přece možné v šabloně volat komponentu s parametrem, podle kterého určíš, jaká šablona se má použít:

{control myControl 2}
public function render($id)
{
}

takže mi z toho plyne, že komponenta může mít šablon klidně víc, ale nemyslím si, že můžeš renderovat všechny 3 současně. Pokud potřebuješ 3 šablony současně, tak potřebuješ i 3 komponenty, z nichž každá se stará o to svoje. Jestli jsem teda pochopil správně tvůj problém.

Editoval 22 (15. 6. 2011 8:18)

crempa
Člen | 198
+
0
-

Mam jednu komponentu, jeden logicky celek s presne danou funkcnosti, ktera se ale graficky realizuje ze trech oddelenych sablon, protoze je nutne aby bylo mozne jeji render ovlivnovat prave na urovni definice tech sablon.

Vzdy se pouziji vsechny tri sablony, jake to ale budou je dano konkretni instanci dane komponenty.

uestla
Backer | 796
+
0
-

Pan hrach zde upozornil, že tento problém již reportoval.

crempa
Člen | 198
+
0
-

Vsiml jsem si, diky za upozorneni v onom vlakne…
Jsem rad ze nejsem jedinej exot s timto problemem :-)