Определить, что товар уже есть в корзине

#
Определить, что товар уже есть в корзине
Можно ли средствами системы сделать так, чтобы при навигации по магазину рядом с товарами, уже добавленными в корзину была пометка вроде "уже в корзине"?
#
Re: Определить, что товар уже есть в корзине
Да-да-да... и если бы в этой пометке было бы еще и количество товара в корзине - было бы совсем хорошо...
http://superweb.pro/ — сайты на HostCMS под ключ
#
Re: Определить, что товар уже есть в корзине
Неужели никто не знает?
#
Re: Определить, что товар уже есть в корзине
Присоединяюсь к вопросу
Модератор
#
Re: Определить, что товар уже есть в корзине
Извлекаете товары из корзины методом GetCart GetItemsFromCart(), проходитесь циклом по результату и формируете $external_property с ID товаров, которые есть в корзине.
Далее внутри XSL уже проверяете, есть ли в переданных данных узел с нужным ID, значит товар уже в корзине.
Могу более подробно пример написать, но несколько позже.
#
Re: Определить, что товар уже есть в корзине
bktoys,
maximumweb,
1. Делаем копию типовой динамической страницы "Интернет-магазин".
2. Ищем в коде вызов ShowShop - их должно быть два.
3. Перед первым вызовом добавляем:


$cart_row = array();
            $cart_row = $shop->GetItemsFromCart(0, $current_shop_id);
            $ext_xml = '<itemincart>';
            foreach ($cart_row as $id => $item) {
                $ext_xml .= $shop->GetItemXml($id);
            }
            $ext_xml .='</itemincart>';
            $ext_xml .='<totalquantity>'.count($cart_row).'</totalquantity>';
            $param['external_xml'] = $ext_xml;


4. В XSL-шаблоне МагазинТовар или МагазинСписокТоваров, при выводе товара
<xsl:template match="item"
проверяем в нужном нам месте лежит ли этот товар уже в корзине:


<xsl:variable name="id" select="@id"/>
<xsl:choose>
   <xsl:when test="//itemincart/item[@id = $id]">
      Товар добавлен
   </xsl:when>
   <xsl:otherwise>
      <a rel="nofollow" href="{/shop/path}cart/?action=add" onclick="Added('addincart{@id}'); AddIntoCart('{/shop/path}', {@id}, 1); return false;" class="addtocart">Добавить в корзину</a>
   </xsl:otherwise>
</xsl:choose>


Заодно оно еще отдает общее количество товаров в корзине и полную информацию о каждом товаре в корзине. Удобно, например, выводить блоки типа "У вас в корзине уже находятся:" и список товаров с названиями и картинками.
Профессиональная разработка сайтов: http://www.internet-expert.ru, info@internet-expert.ru, 8-915-346-46-72
#
Re: Определить, что товар уже есть в корзине
В версии 5.9.32 уже ваш код в 3 пункте не рабочий (GetItemXml должен получить id товара(-ов), а $cart_row содержит всю пачку полей, т.е. остается добраться только до id). Да и в GetItemsFromCart вы отдаете 0 id пользователя, т.е. незалогиненного.

Вообщем поправил под текущую версию ваш код:
         if (class_exists('SiteUsers')){
            $SiteUsers = & singleton('SiteUsers');
            $site_users_id = $SiteUsers->GetCurrentSiteUser();
         }
         else{
            $site_users_id = 0;
         }


            $cart_row = $shop->GetItemsFromCart($site_users_id, 1); //1 - код магазина
            $ext_xml = '<itemincart>';
      
            foreach ($cart_row as $id => $item) {      
                $ext_xml .= $shop->GetItemXml($item["shop_items_catalog_item_id"],$site_users_id);
         }
            $ext_xml .='</itemincart>';
            $ext_xml .='<totalquantity>'.count($cart_row).'</totalquantity>';
            $param['external_xml'] = $ext_xml;


И Спасибо i-ex за идею!
Может кому пригодится.
#
Re: Определить, что товар уже есть в корзине
А как это сделать на AJAX - то есть чтобы без перезагрузки как для краткой корзины генерилось
#
Re: Определить, что товар уже есть в корзине
можно же без AJAX, просто по клику через jquery чтобы менялся стиль и текст кнопки
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Определить, что товар уже есть в корзине
alexpimnev писал(а):
Приведите пример пожалуйста - я в этом не особо разбираюсь

<xsl:variable name="id" select="@id"/>
<xsl:choose>
   <xsl:when test="//itemincart/item[@id = $id]">
      Товар добавлен
   </xsl:when>
   <xsl:otherwise>
      
   </xsl:otherwise>
</xsl:choose>

Нужно чтобы после нажатия просто над кнопкой писалось - Товар добавлен
Авторизация