Jump to content
  • 0

Sprawdzanie czy produkt został już wcześniej kupiony przez Klienta


prostrona

Question

Mamy sklep internetowy księgarni z 20.000 produktów gdzie Klienci to głównie hurtownicy - kupują dużą część nowego asortymentu i ich koszyki zawierają za zwyczaj bardzo dużo produktów.

 

Jak dla zalogowanego użytkownika sprawdzić czy produkt został już przez niego kupiony wcześniej? Jeśli tak to wyświetlić mu komunikat "kupiłeś już ten produkt".

 

Oraz przy okazji prostsza rzecz: Jak dla zalogowanego użytkownika sprawdzić czy dany produkt jest już w koszyku i wyświetlić komunikat "masz już ten produkt w koszyku"?

 

Jakieś pomysły? Z góry dziękuję:)

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Oraz przy okazji prostsza rzecz: Jak dla zalogowanego użytkownika sprawdzić czy dany produkt jest już w koszyku i wyświetlić komunikat "masz już ten produkt w koszyku"?

 

Ja mam to zrobione w następujący sposób.

 

Otwórz themes/twoj-szablon/product.tpl

 

Znajdź

<div class="box-cart-bottom">

Usuń wszystko co jest w tym divie. Zamiast tego wstaw (wewnątrz diva):

<div class="box-cart-info {if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE}unvisible{/if}">
{if !Context::getContext()->cart->containsProduct($product->id)}
<p id="add_to_cart" class="buttons_bottom_block no-print">
<button type="submit" name="Submit" class="exclusive">
<span>Add to cart</span>
</button>
</p></form>
{else}
<div class="alert alert-warning already">
<div style="padding: 5px;margin-top:-10px;"><small>Ten produkt znajduje się już w Twoim koszyku.</small></div>
{/if}
</div>
</div>
{if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}
Link to comment
Share on other sites

  • 0

gdzie to ma się wyświetlać? Na stronie produktu?

 

Informacje o produkcie w koszyku udało mi się szybko i łatwo wdrożyć ale odświeża się dopiero po odświeżeniu strony - będę jeszcze nad tym pracował. Nie mam natomiast zupełnie pomysłu jak wyświetlić informację o tym, że produkt był już wcześniej kupiony. Czy z technicznego punktu widzenia to w ogóle możliwe i wydajnościowo dopuszczalne?

 

Informacja wyświetlana na karcie produktu oraz najlepiej również na liście produktów.

Edited by prostrona (see edit history)
Link to comment
Share on other sites

  • 0

funkcja containsProduct() sprawdza atrybut produktu - jeżeli produkt ma kombinacje to w takiej formie komunikat nie będzie działał - zweryfikuj to jak masz produkty z atrybutami bo może być niespodzianka

 

Dzięki za to - na szczęście tutaj kombinacje atrybutów są wyłączone.

 

Proszę o odpowiedź czy z technicznego punktu widzenia to w ogóle możliwe i wydajnościowo dopuszczalne aby wyświetlić informację o tym, że produkt był już wcześniej kupiony? Wiesz może jaka to funkcja lub gdzie jest to sprawdzane żeby można było w jakiś sposób zaadaptować kod do własnych potrzeb?

Link to comment
Share on other sites

  • 0

trzeba:

- sprawdzić czy klient jest zalogowany

- jeżeli klient jest zalogowany - przechodzimy dalej

-- do zmiennej $zamowienia pobieramy wszystkie zamówienia klienta Order::getCustomerOrders()

--- robimy foreach na zmiennej $zamowienia 
---- w petli tworzymy obiekt $order = new Order($order->id) dla kazdego zamowienia z $zamowienia

---- następna pętla forach na Order->getProductsDetail()

------ sprawdzamy czy w petli znajduje sie id_product = Tools::getValue('id_product')

------ jeżeli tak to $pokaz_info = 1

 

no i wtedy wyswietlamy sobie komunikat jezeli $pokaz_info = 1

  • Like 1
Link to comment
Share on other sites

  • 0

Zostawiam dla potomnych rozwiązanie (nie wiem czy najoptymalniejsze), które działa na 1.6.1 z wyłączoną obsługą kombinacji atrybutów:

 

w product.tpl

<!-- check if you have this product in cart -->
{$idproductincart = Tools::getValue('id_product')}
{$idproductatrincart = Tools::getValue('id_product_attribute')}
{if ($cart->containsProduct({$idproductincart}, {$idproductatrincart}))}
<div class="alert alert-info">{l s='Already in cart'}</div>
{/if}
<!-- / check if you have this product in cart -->
<!-- check if you bought this product before -->
{assign var='context' value=Context::getContext()}
{assign var='product_bought' value='0'}
 {if $context->customer->isLogged()==true}
  {foreach  Order::getCustomerOrders($context->customer->id) AS $key}
   {foreach Order::getIdOrderProduct($context->customer->id, Tools::getValue('id_product')) AS $orders}
     {if {$orders} >= 1}
         {assign var='product_bought' value='1'}
     {/if}
    {/foreach}
  {/foreach}                        
{/if}
{if $product_bought == 1}
 <div class="alert alert-info">{l s='You bought this product before'}</div>
{/if}                   
<!-- / check if you bought this product before -->

w product-list.tpl

      <!-- check if you have this product in cart -->
      {if ($cart->containsProduct($product.id_product, $product.id_product_attribute))}<div class="alert alert-info">{l s='Already in cart'}</div>{/if}
      <!-- / check if you have this product in cart -->
      <!-- check if you bought this product before -->
      {assign var='context' value=Context::getContext()}
      {assign var='product_bought' value='0'}
       {if $context->customer->isLogged()==true}
        {foreach  Order::getCustomerOrders($context->customer->id) AS $key}
         {foreach Order::getIdOrderProduct($context->customer->id, $product.id_product) AS $orders}
           {if {$orders} >= 1}
               {assign var='product_bought' value='1'}
           {/if}
          {/foreach}
        {/foreach}                        
      {/if}
      {if $product_bought == 1}
       <div class="alert alert-info">{l s='You bought this product before'}</div>
      {/if}                   
      <!-- / check if you bought this product before -->

Warto też zerknąć w tutorial na mypresta.eu: https://mypresta.eu/en/art/developer/you-already-bought-this-product.html

Edited by prostrona (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...