Snippet – začátek

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

PHP 5.3.0, nette 0.9-dev jQuery 1.4

Dobrý den,

díval jsem se zde na fóru a nic mi nepomohlo proto se na vás obracím s prosíkem o radu. (Předesílám, že jsem jak v AJAXu tak v Nette zelenáč).

Chci docílit toho, aby se mi po kliknutí na řádek s novinkou vytvořilo okýnko ve kterém by bylo možné tu novinku zobrazit samostatně. (časem bych chtěl skrz to udělat i editaci, ale o tom později)

Pomocí seriálu jsem zkoušel vytvořit ajaxový požadavek, ovšem okýnko se stále chová, jako by žádná data nepřijalo.

@layout.phtml

<div id="content">
                   <h3>{block #tit}{/block}</h3>
                   @{block #content}
                   @{/block}

                   </div>

news.phtml

{foreach $rows as $row}
            <tr{if $iterator->isOdd()} class="odd"{/if}>
                   <td><a href="{link showNew!, $row['date']}" class="windowOpen ajax">{$row['date']|date:'%d.%m. %Y'}</a></td>
	     </tr>
{/foreach}
    {snippet new}
    <div id="window">
        <div id="windowhead">
            {if $new}Novinka z data {$new['date']}
            {else}Přidání novinky
            {/if}
            <div class="right" id="close"><img src="/graph/admin/close.png" alt="X"/></div>
        </div>
        {$new['text']}
    </div>
    {/snippet}

NewsPresenter.php

public function handleshowNew($date)
{
    $this->template->new = $this->dibi->query('SELECT * FROM news WHERE [date] = %d', $date);
    $this->invalidateControl('new');
    if(!$this->isAjax())
    {
        $this->redirect('this');
    }
}

Za každou radu, která i nepovede k řešení, popřípadě jak něco udělat jinak a lépe budu vděčný.

Ondřej Mirtes
Člen | 1536
+
0
-

Pokud vypneš javascript, tak se to chová, jak má?

Každopádně metoda signálu by se měla jmenovat handleShowNew.

A máš v news.phtml zavináč před {block #content}?

Jan Endel
Člen | 1016
+
0
-

tak handle jsem přejmenoval.

pokud vypnu JS tak se to chová stejne čili new == null

neměl jsem, přidal jsem a i tak nic. (děkuju za upozornění)

Jan Endel
Člen | 1016
+
0
-

přepsal jsem handle tak, aby mi dibi vracela asociativní pole

public function handleShowNew($date)
{
    $this->template->test = $date;
    $this->result = $this->dibi->query('SELECT * FROM news WHERE [date] = %d', $date);
    foreach ($this->result->fetchAll() as $item)
    {
        $this->template->new['id'] = $item->id;
        $this->template->new['date'] = $item->date;
        $this->template->new['text'] = $item->text;
    }
    $this->invalidateControl('new');
    if(!$this->isAjax())
    {
        $this->redirect('this');
    }
}

a objevilo se zajimave chovani. Pokud vypnu JS tak se tabulka s novinkami vykresli jen jako by byl limit 1,1 – rozuměj vypíše se jen jedna novinka a do window se vykreslí detail prave teto novinky. Pokud JS zapnu chová se aplikace stejně jako bylo předtím zmíněno (new == null) a pokud zakomentuju v presenteru cast

if(!$this->isAjax())
 {
     $this->redirect('this');
 }

což by při vypnutém JS z logiky věci vadit nemělo. Dostane se aplikace do stejného stavu jako s vypnutým JS (vykreslí se v tabulce všech novinek pouze první a v okně se objeví detaily právě této novinky)

Jan Endel
Člen | 1016
+
0
-

Ahá, takže uná novinka, stačilo si podrobněji přečíst seriál a objevit jak se AJAX debuguje. Nette mi hlásí chybu:

Missing template file 'D:\web\libra\document_root/../app/AdminModule/templates/News/1

otázkou je, kde na tu template přijde a proč vlastně nemá koncovku .phtml.

jasir
Člen | 746
+
0
-

Nezkoumal jsem, ale na fóru jsem už dříve zaznamenal problémy s missing template file 1

Jan Endel
Člen | 1016
+
0
-

Jo, bylo to přesně ono, už to šlape jak má. Díky moc za rady (stačilo přidat před @{extends ../@layout.phtml} ten zavináč)

Editoval pilec (9. 3. 2010 19:00)