Autor Zpráva
_fantomas
Profil
Ahoj, spravil som si odstranovanie položiek z košíku pomocou ajaxu, produkt zmizne pomocou funkcie hide();
a ajax pošle požiadavku PHP.
Všetko funguje ako má ale mám problém s tím že ak mám všetky položky odstránené tak mi ostane hlavička
tabulky, potrebujem dopísať že ak su všetky položky odstránené tak mi tam niečo vyhodí volajaký text.

Takto vyzerá ta tabuľka, dúfam že som to napísal tak že to pochopíte.
Vďaka za rady.

<div id="message"></div>
<table id="cart">
    <tr>
        <th>ID produktu</th>
        <th>Cena</th>
        <th>Množstvo</th>
        <th>Názov produktu</th>
        <th></th>
    </tr>
    <?php foreach ($cartdata as $data) : ?>
    <tr id="idecko<?=$data['id'];?>">
        <td><?=$data['idproduct'];?></td>
        <td><span id="price"><?=$data['price'];?></span><span id="mena"> €</span></td>
        <td><span id="quantity"><?=$data['quantity'];?></span></td>
        <td><?=$data['product_name'];?></td>
        <td><form method="post"><button id="delete-product" onclick="deleteproduct(this.getAttribute('value')); return false;" name="delete-product" value="<?=$data['id'];?>" type="submit">Odstranit</button></form></td>
    </tr>
    <?php endforeach ?>
</table>
<p>Celková cena <span id="cart-price"><?=$price;?></span> €</p>

function deleteproduct(data) {

    console.log(data);

    var tablerow = $('#idecko'+data); // Zvolena polozka
    var quantity = $('#idecko'+data+' td #quantity').text(); // Mnozstvo produktu
    var price = $('#idecko'+data+' td #price').text(); // Cena produktu
    var fullprice = quantity * price; // Celkova cena produktu
    var deletebutton = $('#cart').find('tr td #delete-product'); // Odstranovacie tlacitko
    var message = $('#message'); // Sprava
    var cartinfo = $('#cart-info').text(); // Mnozstvo poloziek v kosiku
    var vysledok = cartinfo - 1; // Mnozstvo poloziek v kosiku - 1
    var cartprice = $('#cart-price').text(); // celkova cena vsetkych poloziek
    var changeprice = cartprice - fullprice; // Zmena ceny

    $.ajax({
        type: 'post',
        url: '',
        data: 'id='+data,
        success: function(data)
        {
            if (message.is(':hidden'))
            {
                $('#cart-price').text(changeprice);
                $('#cart-info').text(vysledok);
                deletebutton.prop('disabled', true);
                tablerow.hide();
                message.slideDown(500).text('Položka bola odstránená');

                setTimeout(function() {
                    message.slideUp(500);
                }, 2000);
                setTimeout(function() {
                    deletebutton.prop('disabled', false);
                }, 2500);
            }
        }
    });
}
Str4wberry
Profil
Napadají mě dva způsoby:

1) Posílat si v AJAXové odpovědi informaci o celkovém počtu položek v košíku a když je rovna nule, tak záhlaví tabulky neukazovat, tj. například tabulku skrýt.

2) Po odebrání si v JS přepočítat počet řádků v tabulce a podle toho zobrazit/skrýt záhlaví.

3) V té akci, která maže produkt z košíku, vrátit celý HTML kód košíku a překreslit celý košík + navázat znovu JS události.

Třetí postup mi přijde výhodnější, protože se nemusí duplikovat ta samá šablonovací logika z PHP do JS. První nebo druhá může být ale jediné řešení v případě, že je vypisování košíku moc pomalé.

Jinak jestli dobře chápu uvedený kód, tak mě napadá otázka, jestli nějak detekujte stav odebrání z košíku (jestli se to povedlo).

Mimochodem, s ohledem na uživatelský dojem z rychlosti se někdy používá trik, kdy se položka vyhodí napřed v JS úplně bez čekání na odpověď serveru a doufá se, že se akce povede (drtivá většina případů). Je ale potom potřeba řešit případ, kdy k dokončení akce skutečně selže.
_fantomas
Profil
Str4wberry:
problém som už vyriešil.
Dal som tam podmienku ak je posledná položka v košíku tak zmaže aj tabulku.
Vdaka.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: