Jak si nechat samostatně vyrenderovat template
- tomaass
- Člen | 74
Ahoj.
Mám stránku, v ní jQuery, který má za úkol natáhnout data ze
serveru.
Představoval by si to tak, že dotaz na konkrentí action vyrenderuje
příslušný template, a předá na výstup (pro Ajax). JQuery si tento
vyrenderovaný template stáhne, a z něj použije část a tu „vloží“ do
stránky.
Problém mám ale s tím vyrenderováním templatu. Nevím jak to obstarat.
Na jQuery příjde jako odezva pouze toto: {"state":[]}
Nebo existuje elegantnější způsob, jak natáhnout „kus stránky“, tak aby to šlo třeba i bez layoutu? (jakoby jen ten $content) ?? Potřebuji ta data hlavně přerenderovaná (s použitím Latte filtru)
Děkuji za jakoukoliv pomoc
Editoval tomaass (28. 8. 2010 12:30)
- tomaass
- Člen | 74
ale nějak to jít musí.
na stránce je jQ kód:
<script>
jQuery.get("?action=inzert_results" , { "page": param}, function(data) {
alert(data);
//alert($(data).find('#results'));
}, "html");
</script>
a já potřebuju od toho PHP, aby vrátil ten přerenderovaný template. Místo toho to ale vrátí onu „sračku“ s prominutim. Čím to je? Je to nějakým přesměrováním?
- Aurielle
- Člen | 1281
Ne. Nette pozná, že request je AJAXový a vrátí to, že se žádný
snippet nezměnil.
A kdyby ses podělil s tím co ti koliduje, tak bychom to možná mohli
vyřešit než aby ses snažil znovu naprogramovat něco, co již
naprogramované je a ty to akorát nechceš použít…
Editoval gmvasek (28. 8. 2010 14:15)
- tomaass
- Člen | 74
No, já nevím co mi zlobí. Ale obešel sem to už dávno, a nechci se v tom vrtat. Mam tam nalinkovane jeste dalsi knihovny a vsechno slape jak ma. Me by stacilo vedet, jak to zaridim, aby nette prekousalo template a poslalo ho. Ale jelikoz se furt teto otazce vyhybate, tak hadam, ze to asi nepujde :(
- Ondrej
- Člen | 110
tomaass napsal(a):
Me by stacilo vedet, jak to zaridim, aby nette prekousalo template a poslalo ho. Ale jelikoz se furt teto otazce vyhybate, tak hadam, ze to asi nepujde :(
ja to dělám tak, že mám proměnnou Presenter::$ajaxMode jako protected a pak ji v action nastavím na FALSE. Tím se vypne ajaxová detekce a pošle HTML výstup místo JSON.
- bazo
- Člen | 620
tomaass napsal(a):
No, já nevím co mi zlobí. Ale obešel sem to už dávno, a nechci se v tom vrtat. Mam tam nalinkovane jeste dalsi knihovny a vsechno slape jak ma. Me by stacilo vedet, jak to zaridim, aby nette prekousalo template a poslalo ho. Ale jelikoz se furt teto otazce vyhybate, tak hadam, ze to asi nepujde :(
ved predsa musis pouzit snippety
- Ondrej
- Člen | 110
tomaass napsal(a):
No něco podobného jsem zkoušel, ale v renderu. A nešlo to.
Ted sem to prehodil do action, ale hází to chybu, i když v presenteru to definuju jako protected. Můžu vědět, proč tam máte dvojtečky? To je jako static?
Neni to static, chtel jsem odkazat na tridu Presenter a jeji atribut AjaxMode. https://api.nette.org/…ter.php.html#91
Bohuzel me nettovska implementace private atributu omezuje pri pouzivani javascriptovych ajaxovych knihoven tretich stran, ktere ocekavaji HTML kod, ale nette se pri ajaxovem pozadavku prepne do vystupu JSON, s cimz tyto knihovny nepocitaji. Korektni reseni je nejspis prepsat si metodu Presenter::isAjax() ve svem presenteru, ale pokud mam vic action a jen u nekterych chci potlacit JSON, tak mi prislo vyhodnejsi si private predelat na protected.
- newPOPE
- Člen | 648
Pokial chces poslat HTML namiesto JSON tak to proste skusit asi takto v actionXXX
<?php
public function actionXXX(...) {
if($this->isAjax()) {
$this->template->render();
$this->terminate();
}
}
?>
ci to takto pojde na 100% netusim pisem to z hlavy, neviem na co vymyslat ochadzky ;-)
Editoval newPOPE (28. 8. 2010 21:54)
- tomaass
- Člen | 74
Tak je to vyřešeno. Děkuji za spolupráci. Zde je hotové řešení:
<?php
public function actionInzert_results($param)
{
if($this->isAjax()) {
// renderuju jen template bez layoutu
$this->template->setFile(APP_DIR . '/templates/Default.inzert_results.phtml');
// zavolám metodu pro naplnění hodnot do templatu
$this->renderInzert_results($param);
$this->template->render();
$this->terminate();
}
}
?>
Děkuju
Editoval tomaass (29. 8. 2010 19:03)