Po ajaxu změnit jen malou část stránky přes snippet
- resigo
- Člen | 20
Dobrý den,
nevíte jak obnovit pouze malou část výpisu z databáze? Když tam dám
snippet, úplně to přestane fungovat, nemá to userRow. Postupoval jsem podle
dokumentace na Nette, ale nějak jsem tomu nerozumněl.
V template mám
{snippet usersContainer}
<article n:foreach="$usersList as $userRow">
<div>
<h2>{$userRow->first_name} {$userRow->last_name}</h2>
<img src="images/upload/{$userRow->picture}">
{if $user->id != $userRow->id}
** Tady odtud bych chtěl snippet **
{if $userRow->cu == 0}
<a n:href="like! $userRow->id" class="ajax">to se mi líbí</a>
{else}
<a n:href="unlike! $userRow->id" class="ajax">už se mi to nelíbí</a>
{/if}
** Konec snippetu **
{/if}
</div>
</article>
{/snippet}
Presenter
public function handleLike($user_id)
{
if($this->user->id&&$user_id!=$this->user->id)
{
if($this->usersModel->findById($user_id))
{
$this->pointsModel->saveLike($user_id, $this->user->id);
}
if ($this->isAjax()) {
$this->redrawControl('usersContainer'); // Zde bych chtěl překreslit pouze část s Like&Unlike
} else {
$this->redirect('this');
}
}
else
{
$this->redirect('this');
}
}
Moc vám děkuji. :)
- resigo
- Člen | 20
Co nechápu je, jak vložit pouze jeden řádek aby se aktualizovalo pouze jedno user-id. Díky za trpělivost.
{snippet user-$userRow->id}
{if $userRow->cu == 0}
<a n:href="like! $userRow->id" class="ajax">to se mi líbí</a>
{else}
<a n:href="unlike! $userRow->id" class="ajax">už se mi to nelíbí</a>
{/if}
{/snippet}
$this->template->usersList = $this->usersModel->findTop100($user_id, $user_id);
$this->redrawControl('usersContainer');
- David Matějka
- Moderator | 6445
V handle* nactes pouze onen konkretni radek (a das ho do pole, aby sablona nic nepoznala :)) a v render pak jiz nebudes volat findTop100
- David Matějka
- Moderator | 6445
v handleLike nastav userList, aby v tom byl pouze ten jeden radek, zhruba takhle:
...
if($row = $this->usersModel->findById($user_id))
{
$this->template->userList = array($row);
$this->pointsModel->saveLike($user_id, $this->user->id);
}
...
a v render metode pak nacti plny seznam jen pokud je ta property v sablone prazdna, takze
public function renderDefault()
{
if(!isset($this->template->userList)) {
$this->template->userList = ....
}
}
- David Matějka
- Moderator | 6445
jeste tam mam vlastne chybu.. v tom handle to do ty sablony muzes poslat jen pokud se jedna o ajaxovy request.
proste pri ajaxovem requestu na ten signal posles do sablony pouze jeden radek s tim konkretnim zaznamem, co se ma prekreslit