nie do końca sie zrozumieliśmy
opisze od początku
jest sobie jakaś tam lista produktów,
echo "<td class='nazwa'><a href='java script:ddk(\"".StringToHTML
($arrRow["Symbol"])."\",\"add\")'>".StringToHTML
($arrRow["Nazwa"])."</a></td>".$eol;
po kliknięciu w produkt jest on wysyłany do koszyka.
<script type='text/javascript'>
function ddk(idp,akcja)
{
$.ajax({
url: 'cart.php',
type: 'POST',
data: {
tryb : 'dodaj_do_koszyka' ,
id_przedmiotu : idp,
action: akcja
},
success: function(odpowiedz)
{
//document.getElementById('info').style.display='block';
$('#info').fadeIn('slow');
setTimeout('ukryj()',2000);
$('#infotext').html('Produkt dodany do zamówienia.');
// $('#koszyk').load('cart.php');
// alert('odpowiedz');
},
error: function(){
document.getElementById('info').style.display='block';
setTimeout('ukryj()',1500);
$('#infotext').html('Błąd Połączenia - Spróbój jeszcze Raz.');
//alert('Błąd połączenia ajax');
}
});
}
function ukryj() {
$('#info').fadeOut('slow');
}
</script>
i skrypt obslugujący dodawanie
$cart = $_SESSION['cart'];
$action = $_POST['action'];
switch ($action) {
case 'add':
if ($cart) {
$cart .= ','.$_POST['id_przedmiotu'];
} else {
$cart = $_POST['id_przedmiotu'];
}
break;
(...)
tutaj odrazu może wspomnę że po kliknięciu dodaje się 1szt danego przedmiotu.
docelowo chciałbym aby po kliknięciu pokazywał się input gdzie można by było zdefiniować ilość.
jeszcze się nie zastanawiałem jak to zrobić ale czuje w kościach ze kolorowo nie będzie tym bardziej, ze poległem na etapie edycji..
zobaczymy
wracając do tematu..
dalej mamy listę zamawianych produktów
gdzie można zmienić ilość sztuk czyli to o co się rozchodzi..
(...)
<form action="admin.php?tab=koszyk" method="post" id="cart" >
(...)
$output[] = ' <div style="display:inline;" id="count'.$id.'">';
$output[] = ' <a href="java script:void(0)" class="ui-icon ui-icon-pencil" style="float: left; cursor: auto; " title="Zmień ilość produktów" onclick="$("#count'.$id.'").attr("style","display:none");$("#countUpdate'.$id.'").attr("style","display:inline");">';
$output[] = ' </a>'.$qty.'';
$output[] = ' </div>';
$output[] = ' <div style="display:none;" id="countUpdate'.$id.'">';
$output[] = ' <a href="java script:void(0)" class="ui-icon ui-icon-close" style="float: left; cursor: auto; " onclick="$("#countUpdate'.$id.'").attr("style","display:none");$("#count'.$id.'").attr("style","display:inline");">';
$output[] = ' </a>';
$output[] = ' <input name="action" value="update" type="hidden">';
$output[] = ' <input name="qty'.$id.'" id="qty'.$id.'" title="Enter = zapisz" class="editores" style="width:20px;" type="text" value="'.$qty.'" onkeypress="handleKeyPress(event,this.form)">';
$output[] = ' </div></td>';
skrypty obsługujące
<script type="text/javascript"> function handleKeyPress(e,form){
var key=e.keyCode || e.which;
if (key==13){
form.submit();
}
}
case 'update':
if ($cart) {
$newcart = '';
foreach ($_POST as $key=>$value) {
$items = ($newcart != '') ?
explode(',',$newcart) : explode(',',$cart); $newcart = '';
foreach ($items as $item) {
if ($id != $item) {
if ($newcart != '') {
$newcart .= ','.$item;
} else {
$newcart = $item;
}
}
}
for ($i=1;$i<=$value;$i++) {
if ($newcart != '') {
$newcart .= ','.$id;
} else {
$newcart = $id;
}
}
}
}
}
$cart = $newcart;
break;
oraz usuwanie przedmiotu z koszyka.
$output[] = ' <td valign="top">';
$output[] = " <a href='java script:uzk(\"".$id."\",\"delete\")' onClick='$(\"#item".$id."\").fadeOut(\"slow\")' class='ui-icon ui-icon-trash' style='float: left; cursor: auto; ' title='usuń z zamówienia'>";
$output[] = ' </a></td>';
<script type='text/javascript'> function uzk(idp,akcja)
{
$.ajax({
url: 'cart.php',
type: 'POST',
data: {
tryb : 'usun_z_koszyka' ,
id_przedmiotu : idp,
action: akcja
},
success: function(odpowiedz)
{
//document.getElementById('info').style.display='block';
$('#info').fadeIn('slow');
setTimeout('ukryj()',2000);
$('#infotext').html('Produkt usunięty z zamówienia.');
// $('#koszyk').load('cart.php');
// alert('odpowiedz');
},
error: function(){
document.getElementById('info').style.display='block';
setTimeout('ukryj()',1500);
$('#infotext').html('Błąd Połączenia - Spróbój jeszcze Raz.');
//alert('Błąd połączenia ajax');
}
});
}
function ukryj() {
$('#info').fadeOut('slow');
}
case 'delete':
if ($cart) {
$newcart = '';
foreach ($items as $item) {
//if ($_GET['id'] != $item) {
if ($_POST['id_przedmiotu'] != $item) {
if ($newcart != '') {
$newcart .= ','.$item;
} else {
$newcart = $item;
}
}
}
$cart = $newcart;
}
break;
jak widać update odbywa się tylko za pomocą PHP
chce to zmienić na jQuery czyli bez przeładowania strony no i tak żeby zmiany były odrazu widoczne,
gdyż jak wspominałem wcześniej będą na pewno takie sytuacje kiedy ktoś przy pozycji 50, 100 i 150 wymyśli sobie zmianę ilości sztuk
i niech przy pozycji 50 wciśnie enter.. strona się przeładuje,lista wróci do początku i trzeba będzie przewijać z powrotem w dól do pozycji nr 100... nieco męczące dlatego chce to wyeliminować
mam nadzieje ze teraz jest bardziej zrozumiale

//edit
przez POST ma być wysłane:
action = update
qty.'$id.' = '.$qty.'
Próbowałem dać tak,
<input name="qty'.$id.'" id="qty'.$id.'" title="Enter = zapisz" class="editores" style="width:20px;" type="text" value="'.$qty.'" onchange="ewk(\"update\",\"'.$qty.'\")" >
function ewk(akcja,ilosc)
{
$.ajax({
url: 'cart.php',
type: 'POST',
data: {
tryb : 'edytuj_w_koszyku' ,
action: akcja,
ilosc : qty
},
i mam 2 problemy.
1. jeżeli dobrze myślę to w powyższym skrypcie zamiast "ilość" powinienem mieć qty'.$id.'
tak aby za każda zmianą było qty1 : 5 / qty2 : 7/ itd
ale jest to niemożliwe gdyż zmienne definiowane są w zupełnie gdzie indziej wiec nie mogę użyć ich w tym miejscu..
znając życie to na pewno istnieje na to proste rozwiązanie..
2. zmieniam zawartość inputa ale firebug w ogole nie wyłapuje aby cokolwiek się wysyłało i nie wiem dlaczego..