Jak odeslat snippet v JSON bez AJAXového požadavku

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

Ahoj,
potřeboval bych při zavolání handle v komponentě odeslat snippet v JSON bez AJAXového požadavku.
Zkoušel jsem volat v handle metodě

$this->presenter->sendPayload();

ale to nic nevrátí. Když naplním něco do payload, např.

$this->presenter->payload->mydata = $data;

tak to vrátí jen to mydata.

Díky za radu
Lukáš

David Matějka
Moderator | 6445
+
0
-

predpokladam, ze to souvisi s https://forum.nette.org/…v-komponente#… a s tim, ze uploadify neposila spravnou hlavicku, dle ktery se pozna ajax, ze?

koukni, jestli posila neco, dle ceho by se to nechalo dobre detekovat a kdyztak si prepis metodu isAjax v presenteru, tak, aby se to chovalo jako ajaxovy i pri pozadavku z uploadify..

konva
Člen | 88
+
0
-

ahoj,
ano souvisi to s tim, ale nikdo neodpovida :). Prepsat metodu isAjax jsem zkousel v basePresenteru, ale zadna zmena … Zkousel jsem toto

public function isAjax()
    {
        if ($this->getParam('use_ajax')) {
            return TRUE;
        } else {
            return parent::isAjax();
        }
    }

resp. Zkusil jsem i toto, ale pořád se mi vrací text

public function isAjax()
    {
        return TRUE;
    }

Uploadify posílá toto

    "accept":"text\/*",
    "content-type":"multipart\/form-data; boundary=----------Ij5Ef1Ef1KM7cH2KM7Ij5ei4ae0ei4",
    "user-agent":"Shockwave Flash",
    "host":"test.loc",
    "content-length":"202461",
    "connection":"Keep-Alive",
    "cache-control":"no-cache",
    "cookie":"PHPSESSID=g3rcs6lvtatnp2d50hilltq284;
    nette-browser=foaxgh7znl"

Editoval konva (28. 1. 2014 19:50)

norbe
Backer | 405
+
0
-

Zkus nastavit $this->snippetMode = TRUE, vyrenderovat šablonu $this->template->render() a až pak poslat payload…

konva
Člen | 88
+
0
-

To je přesně to co jsem potřeboval, už to funguje. Slává :). Snad jednou pujde online koupit pivo, protoze bych ti ho ted rad koupil :)
Moc díky
Lukáš

nanuqcz
Člen | 822
+
0
-

Můžu se zeptat (jen ze zvědavosti), co přesně nastavuje ta proměnná $this->snippetMode? V dokumentaci nic není, a z API lze vyčíst pouze to, že je to proměnná typu bool.

Editoval nanuqcz (29. 1. 2014 0:43)

Etch
Člen | 403
+
0
-

Minimálně se používá v template.

// template extending and snippets support

$_l->extends = empty($template->_extended) && isset($_control) && $_control instanceof Nette\Application\UI\Presenter ? $_control->findLayoutTemplateFile() : NULL; $template->_extended = $_extended = TRUE;


if ($_l->extends) {
	ob_start();

} elseif (!empty($_control->snippetMode)) {
	return Nette\Latte\Macros\UIMacros::renderSnippets($_control, $_l, get_defined_vars());
}


//
// main template
//
if ($_l->extends) { ob_end_clean(); return Nette\Latte\Macros\CoreMacros::includeTemplate($_l->extends, get_defined_vars(), $template)->render(); }
call_user_func(reset($_l->blocks['content']), $_l, get_defined_vars()) ;