Problem s prazdnym JSON, snippet v controlu

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

Ahojte, mam trosku problem s ajaxovym snippetem. Mam sablonu @layout.latte, v te {include #content}.
Pak uz je sablona Site.default.latte, ve ktere mam

{block #content}
<h2 class="nazev-stranky">{$site->site_heading}</h2>
{foreach $contents as $content}
{if $content->content_type == 'gallery'}
    {var $cntrl = 'galControl' . $content->content_id}
    {control $cntrl:front}
{/if}
{if $content->content_type == 'poll'}
    {var $cntrl = 'pollControl' . $content->content_id}
    {control $cntrl:front}
{/if}
{if $content->content_type == 'text'}
    {var $cntrl = 'textControl' . $content->content_id}
    {control $cntrl:front}
{/if}
{if $content->content_type == 'article'}
    {var $cntrl = 'artControl' . $content->content_id}
    {control $cntrl:front}
{/if}
{if $content->content_type == 'file'}
    {var $cntrl = 'fileControl' . $content->content_id}
    {control $cntrl:front}
{/if}
{/foreach}
{/block}

a v controlu article:front

{snippet article}
<div class="clanky">
    {if is_file(WWW_DIR . '/articles/' . $content->art_image)}<div class="nahled"><a href="{$basePath . '/articles/' . $content->art_image}" rel="lightbox"><img src="{$baseUri.'/'}{='/articles/' . $content->art_image|resize:'100x80'}" class="fotka"></a></div>{/if}
    <div class="popis">
        {if $content->content_show_date}<p class="datum">{$content->content_created|date:'%d. %m. %Y'}</p>{/if}
        {if $content->content_as_dir}<h2><a n:href="showWhole!" class="ajax">{$content->art_heading}</a></h2>
        {!$content->art_text|htmlTruncate:100}
        {else}
        {if $content->content_show_name || $content->content_as_dir}<h2>{$content->art_heading}</a>{/if}
        {!$content->art_text}
        {/if}
    </div>
</div>
{/snippet}

v controlu mam

public function handleShowWhole() {
    $this->currentArticle->content_as_dir = FALSE;
    if($this->getPresenter()->isAjax()) {
        $this->invalidateControl('article');
    } else {
        $this->redirect('this');
    }
}

V jinem modulu v administraci mi obdobna struktura funguje naprosto perfektne, zde ovsem vraci prazdny JSON… Nevite co s tim?

aannubis
Člen | 33
+
0
-

Napadlo me ze by to mohlo byt jeste timto:

https://github.com/…e/issues/160

Ale presne nevim, kazdopadne chci volat renderFront… Muze to byt tim? A da se to nejak obejit?

aannubis
Člen | 33
+
0
-

Takze skutecne to bylo tou chybou, ze se ve snippetu zavola default render.
Obesel jsem to tedy zatim takto:

public function render() {
    if($this->getPresenter()->getName() == 'Front:Site') {
        $this->renderFront();
        return;
    }
}

Mate nekdo lepsi napad?

knyttl
Člen | 196
+
0
-

Mám stejný problém. Po invalidaci snippetu v controlu je volána defaultní akce. Obešel jsem to Tvým způsobem, ale je to teda ošklivé.

ptacek.pavel
Člen | 27
+
0
-

Zdravím,
na github jsem nahodil commit https://github.com/…2536f4e4fe75 , který by toto měl řešit. Zachovává se jak vlastní render() metoda při ajaxovém volání, tak i její parametry.

Potřeboval bych to od Vás ale otestovat – všechno vypadá ok, nicméně bych chtěl potvrzení :-)

Dejte vědět, díky moc!

Editoval ptacek.pavel (18. 12. 2011 20:46)