Odkaz na funkci

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

Ahoj zacinam s Nette a dostal jsem se do problemu, kdy mam v tabulce vypsane data a u kazdeho radku mam obrazek krizku na vymazani.
Poradte, prosim, jak udelat z obrazku klikaci tlaciko, ktere mi spusti nejakou funkci? Potrebuji presmerovat na stejnou stranku a ve funkci, treba smaz($id) bude kod na smazani zaznamu z databaze.

Ondřej Brejla
Člen | 746
+
0
-

Nejjednodušší způsob, v aktuálním presenteru, který stránku zpracovává, si vytvoř funkcni public function handleDelete($id) { /* tady zpracuju smazání předaného id a přesměruji na adresu bez id */} a v šabloně obal onen obrázek křížku do a tagu, s tím, že href atribut bude vypadat následovně: <a href="{link delete! $data->id}"><img...muj super krizek obrazek...></a>. V $data->id předpokládám aktuální id mazaného vypsaného prvku.

To by mělo fungovat. Nicméně by si měl vědět, že je zde možnost CSRF útoku. Takže by bylo záhodno ho nějak ošetřit (můžeš zkusit hledat na fóru). Dále to, že změna stavu řešená přes GET (čti odkaz) není ideální a řešit by se měla pokud možno přes form a POST. Ale toto implementovat není pro začátečníka nejjednodušší, takže pro nejrychlejší implementaci funkčnosti zkus použít onu možnost s odkazem popsanou výše.

Snad ti to trošku pomůže.

Jinak doporučuji si přečíst seriál na Zdrojáku.

Aldaris
Člen | 6
+
0
-

Diky za odpoved

Predelavam funkcnost jednoho vytvoreneho projektu (neni muj) a je to tam udelane tak, ze v DefaultPresenteru ziskam v renderovaci funkci hodnotu id z databaze a je ulozena v promenne $cinnost[‚id‘].

V template mam:

<div class=modul-1>
    <center>{!$obsah}<br /><br /></center>
</div>

a v presenteru pak toto

<?php
public function renderAdministraceCinnosti()
{
...
    $obsah = <a href=\"{link delete! $cinnost['id']}\"><img src=\"images/no.gif\" alt=\"Smazat činnost\" title=\"Smazat činnost\"></a>";
    $this->template->obsah = $obsah;

...
}

public function handleDelete($id)
{
    $dotaz = $this->db->query("DELETE FROM cinnosti_seznam WHERE id=%i", $id);
}
?>

Akorat mi to nic neudela, proste me jen presmeruje na prihlasovaci stranku.. Kde mam chybu?

je to jen vycuc kodu, tak snad jsem na neco nezapomnel

Serial si pak proctu, ale momentalne bych to prave potreboval co nejjednoduseji

Editoval Aldaris (23. 11. 2009 13:22)

Aldaris
Člen | 6
+
0
-

Tak uz jsem na to prisel

<a href=\"".$this->link('delete!',$cinnost['id'])."\"><img src=\"images/no.gif\" alt=\"Smazat činnost\" title=\"Smazat činnost\"></a>

Kazdopadne diky za nakopnuti :)

Ondřej Mirtes
Člen | 1536
+
0
-

Ten $obsah v této podobě patří do šablony, pak ti bude fungovat i makro {link}.