Zavolání jiné šablony AJAXem a vypsání obsahu

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

Ahoj,

řeším věc, jak si načítat AJAXem jiný obsah, abych nemusel mít hromadu snippetů v jedné šabloně, ale mohl jsem mezi nima přepínat. V layoutu mám odkaz

<a href="{link click!}" class="ajax">Click</a>

v DefaultPresenteru (homepage) mám zaregistrovanou handle pro click

function handleClick(){
    if ($this->isAjax()) {
        $this->template->setFile('new.ajax.phtml');
    }
}

to vše je v pořádku, AJAX požadavek se provede, ale Firebug mi vyhodí 505ku a Missing template file '/new.ajax.phtml'. Používám $OldLayoutMode = FALSE, templata ve složce je a házelo to stejnou chybu, i když jsem použil absolutní cestu (protože jsem nevěděl, jak tu šablonu načíst). struktura je jako ve skeletonu, ale prostě to tu šablonu nechce najít.

a chtěl bych se pak i zeptat, jestli todle funguje, tak pokud mám připravené zavináše a handle by se provedl, refreshnulo by to stávající obsah a hodilo obsah požadované proměnné?

Díky za radu

newPOPE
Člen | 648
+
0
-

pokial pouzivas setFile(); tak musis tusim zadat cestu absolutnu tzn.

<?php

	$this->setFile(dirname(__FILE__) . '/../templates/new.ajax.phtml');

?>

ad 2) ano server by ti vratil updatnute snippety s novym obsahom v JSON, este by si
ich musel invalidovat

dEath
Člen | 39
+
0
-

ono mi to tu šablonu stejně nechce najít, není problém v tom, že v presenteru na ní nemám odeslaný žádný render? zkusil jsem taky místo setFile() použít $this->view = 'ajax'; a to už obsah načte, ve firebugu se zobrazí nový obsah, akorát to nerefreshne stránku …

function handleClick(){
    if ($this->isAjax()) {
       $this->view = 'ajax';
       $this->invalidateControl();
    }
}

pokud tam není invalidateControl();, tak se načte přes XHR HTML stránka, pokud tam bude, získám prázdné snippety, ale obsah se nenačte. potřebné JavaScript soubory mám načtené, protože AJAX mi jinak funguje naprosto v pořádku.

aha, v tomhle případě se musel dát i @{include #content} do snippetu … to mi taky mohlo dojít dřív :-) ale díky za radu, nakomplo mě to

Editoval dEath (2. 9. 2010 23:39)