Signál checkbox a radioList
- sppilka
- Člen | 37
Ahoj,
Jde nějak přidat signál na Checkbox a radioList? V templatu si foreachem vypíši do tabulky lidi, a chci mít u nich u každého jeden checkbox a radiolist s ANO/NE stím, že po výběru se proces vložení dat do db provede okamžitě. Odkazem n:href předám parametr za signálem, ale jak je tu checkboxu?
Hádám, že to bude nějaký ajax… Nevěděli byste alespoň náznak jak to udělat funkční?
díky
- MartyIX
- Člen | 217
Takhle by to bylo pro jeden checkbox. Je potreba toho dost doplnit, ale toto je zaklad.
public function handleCheckboxChange() {
$value = $this->presenter->getParameter('checkboxvalue');
// Database ...
// ...
// Response ...
$this->presenter->payload->success = true; // value was changed successfully
$this->presenter->sendPayload();
}
Sablona:
$.getJSON({link checkboxChange), { checkboxvalue: $('#checkbox').val() }, function (data) {
alert(data.success ? "Zmeneno" : "Chyba!");
});
- sppilka
- Člen | 37
Jasně, takže to první je funkce v komponentě.php a ten getJSON je v hlavičce předpokládám, a co by se mělo doplnit do šablony přímo do toho <td></td>?
Otázka kde se předává to id?
V tom zakomentovaném DAtabase to bude vložení do db, a to response to je odezva z toho vložení do db jestli se to vložilo? Čili něco jako
/...
$ok = $this->table->insert(array(
'dochazka' => $value
))
if($ok){
$this->presenter->payload->success = true; // value was changed successfully
$this->presenter->sendPayload();
}
Ten ajax je pro mě aztím španělská vesnice
- MartyIX
- Člen | 217
sppilka napsal(a):
Jasně, takže to první je funkce v komponentě.php a ten getJSON je v hlavičce předpokládám, a co by se mělo doplnit do šablony přímo do toho <td></td>?
Jj, prvni patri do komponenty a to druhe je ukazka odeslani hodnoty jednoho checkboxu pres AJAX.
Z toho uvodniho prispevku jsem pochopil, ze v okamziku, kdy uzivatel klikne na checkbox, tak se ma udelat ten AJAXovy pozadavek. Pak si muzes v sablone udelat:
<td>
<input type="checkbox" name="chck-{$id_uzivatele}" data-checkboxid="{$id_uzivatele}" value="1" /> Ano<br />
<input type="checkbox" name="chck-{$id_uzivatele}" data-checkboxid="{$id_uzivatele}" value="0" /> Ne
</td>
Otázka kde se předává to id?
S IDckama bys to mohl udelat nejak takto.
$(document).ready(function() {
$('#myTable input:checkbox').click(function() {
var user_id = $(this).data('checkboxid');
var params = {
checkboxvalue: $('#checkbox').val(),
user_id: user_id
};
$.getJSON({link checkboxChange), params, function (data) {
alert(data.success ? "Zmeneno" : "Chyba!");
});
});
});
V tom zakomentovaném DAtabase to bude vložení do db, a to response to je odezva z toho vložení do db jestli se to vložilo? Čili něco jako
/... $ok = $this->table->insert(array( 'dochazka' => $value )) if($ok){ $this->presenter->payload->success = true; // value was changed successfully $this->presenter->sendPayload();
Tohle je spatne, sendPayload musis zavolat vzdy, to zajisti, ze Nette vrati odpoved v JSONu.
Spravne tedy:
$ok = $this->table->insert(array('dochazka' => $value)); // tohle bych asi umistil do modelu
$this->presenter->payload->success = $ok;
$this->presenter->sendPayload();
>
}
\--Ten ajax je pro mě aztím španělská vesnice
- sppilka
- Člen | 37
Takže nějak by to celé vypadalo takto:
Komponenta:
public function handleCheckboxChange() {
$value = $this->presenter->getParameter('checkboxvalue'); //ziskame hodnutu checkboxu 1/0
$id_user = $this->presenter->getParameter('id_user'); //idcko z id_user - budeto fungovat?
$ok = $this->table->where('id = ?', $id_user)->update(array('dochazka' => $value)); //update mohlo by byt v modelu, postaci zatim takto
$this->presenter->payload->success = $ok; //pokud ok vrati true vse je success
$this->presenter->sendPayload(); //tohle odesle presenteru obsah? nebo jak to funguje?
}
Pote v sablone v hlavicce ten tvuj kod
$(document).ready(function() {
$('#myTable input:checkbox').click(function() {
var user_id = $(this).data('checkboxid');
var params = {
checkboxvalue: $('#checkbox').val(),
user_id: user_id
};
$.getJSON({link checkboxChange), params, function (data) { // tady odesleme i id do params
alert(data.success ? "Zmeneno" : "Chyba!");
});
});
});
a v šabloně ve foreach($attendance as $a)…
<td>
<input type="checkbox" name="chck-{$a->id}" data-checkboxid="{$a->id}" value="1" /> Ano<br />
<input type="checkbox" name="chck-{$a->id}" data-checkboxid="{$a->id}" value="0" /> Ne
</td>
Mohlo by to takhle fungovat?
Editoval sppilka (31. 8. 2012 12:49)
- MartyIX
- Člen | 217
sendPayload
by mel fungovat a ten zbytek si prece dokazes
oddebugovat, ne? Treba v Chrome to jde fakt jednoduse. CTRL+SHIFT+J, podivas se
do karty Network, co ti ten ajax request vraci (muzes pouzit echo, pokud si
nejses jisty, co se tam deje) a jak se zavolal (jak vypada URL a parametry).