Sesbírání dat ze stránky poslání ajaxem a zpracování
- kloban
- Člen | 123
Ahoj,
dělám svoji první aplikaci a mám problém s ajaxem a přebíráním dat
v prezenteru.
Přidal jsem si do aplikace nette.ajax.js od Vojtěcha Dobeše, ale nepodařilo
se mi pochopit jak ho přesně použít.
V šabloně mám několik elementů, kterým jsem přidal class=„ajax“ a
potřebuju v prezenteru pracovat s jejich id. To znamená, že mě obsah
elementu nezajímá, zajímá mě pouze id.
Jak tyto údaje odešlu? A jak řeknu ajaxu, kterému prezenteru má data
poslat?
Pokud máte někdo čas, prosil bych o příklad.
Dejme tomu, že mám v prezenteru „HomepagePrezenter.php“ metodu „public
function actionUlozObjednavku()“.
Šablona mi vygeneruje:
<div id="4">Smažený sýr</div>
<div id="3">Kuře na paprice</div>
<div id="5">Opékané brambory</div>
A právě ty „id“ potřebuji předat metodě.
Díky za reakce. A omlouvám se za tak dlouhý dotaz.
Editoval kloban (28. 2. 2014 9:48)
- kloban
- Člen | 123
V HomepagePrezenter pouze načítám data z databáze.
public function renderDefault()
{
$this->template->posts = $this->database->table('jidelni_listek')
->order('id DESC')
->limit(5);
}
Ty pak v šabloně načítám:
{block content}
<h1 n:block="title">Jídelní lístek</h1>
<div class="post">
{foreach $posts as $post}
<div id="{$post->id}">{$post->nazev}</div>
{/foreach}
</div>
<div class="post2">
</div>
<a id="tlacitko">tlačítko</a>
Dále pomocí jquery po kliknutí na nějaký „div“ ho naklonuju do „post2“.
$("div.post > div").click(function(){
$(this).clone().appendTo("div.post2").attr("class", "ajax");
});
Id divů, které jsou zkopírovány do post2 bych potřeboval předat prezenteru.
Žádný formulář tedy nevytvářím. Prezenter mi jen dodá data, která vypisuju do divu „post“ a ty pak přes jquery kopíruju (vybíram). Ty co jsem vybral bych potřeboval poslat poslat zpět prezenteru.
Snad už je to jasnější kdyžtak se ptej. :-)
Ještě abys věděl k čemu to má být. Číšníkovy se zobrazí jídelní
lístek z něhož objednává. Po odeslání objednávky ji prezenter uloží
do databáze. Toť zjednodušeně vše.
Celá aplikace je zde: http://dp.schoula.cz/sandbox/www/
- Oli
- Člen | 1215
Práce s id není 100%. Pokud někdo (nevím kdo a proč) bude mít vypnutej js, tak ti to nepojede. s tím ajaxem se standardně pracuje zhruba takhle:
{snippet objednavka}
<a n:href="ulozObjednavku! 4" id="4" class="ajax">Smažený sýr</a>
<a n:href="ulozObjednavku! 3" id="3" class="ajax">Kuře na paprice</a>
<a n:href="ulozObjednavku! 5" id="5" class="ajax">Opékané brambory</a>
{/snippet}
public function handleUlozObjednavku($id)
{
//uloz objednavku
if ($this->isAjax()) // pokud to nemáš v presenteru, ale v komponentě tak místo $this použij $this->presenter
{
$this->flashMessage('Objednávka byla uložena');
$this->invalidateControl('objednavka');
} else
{
$this->redirect('this');
}
}
Tohle ti bude fungovat vždy.
EDIT:
Pokud si to chceš naklikat a poslat, tak nejjedonušší je něco jako
$.ajax({ // myslím, že by to mohlo s nette.ajax.js fungovat kdyz misto $.ajax das neco jako $.nette.ajax, ale nejsem si tím jistej
url: {link ulozObjednavku!}
data: { name: tvojeIDcka }
});
Editoval Oli (28. 2. 2014 11:54)