Snippet – začátek
- Jan Endel
- Člen | 1016
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
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
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
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
Nezkoumal jsem, ale na fóru jsem už dříve zaznamenal problémy s missing template file 1