Jump to content

[RESOLU] ajax-cart alert [prestashop 1.5.1]


Recommended Posts

Bonjour à tous,

Je suis en plein développement d'un module qui permet l'ajout de produit dans le panier.

Cependant si on tente d'ajouter une quantité invalide (plus en stock, quantité minimal non respectée..) une alert javascript prévient l'utilisateur du problème.

 

Serait-il possible de récupérer cette alert javascript pour afficher le message de celle-ci dans un encadré de type

<div class=error></div>

(comme lors de l’inscription d’un utilisateur)

 

merci à vous.

 

 

ps:j'ai remarqué que l'ajout d'un produit hors stock à partir du catalogue d'un prestashop non modifié lance un alert javascript également... quelqu'un aurait-il réussi à capter ces alert, pour les remplacer par un message plus "propre"...

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

  • 2 weeks later...

J'ai résolu, ce petit probleme:

 

dans ajax-cart.js:

 

ajoutez:

 

if (jsonData.hasError)
 {
  var errors = '';
  for(error in jsonData.errors)
   //IE6 bug fix
   if(error != 'indexOf')
	errors += jsonData.errors[error] + "\n";
  if (addedFromProductPage)
   $('body#product p#add_to_cart input').removeAttr('disabled').addClass('exclusive').removeClass('exclusive_disabled');
  else
   $('.ajax_add_to_cart_button').removeAttr('disabled');


  $('#'+idProduct).show();
  $('#'+idProduct).html('<div class="arrow"><div class="arrow_overlay"></div></div>'+errors);
  $('#'+idProduct).css( 'cursor', 'pointer' );
  setTimeout(function() {
   $('#'+idProduct).html('');
   $('#'+idProduct).hide();

  },5000);

  $('#'+idProduct).click(function(){
   $(this).hide();
  });
 }

 

aprés la ligne (+- 227):

// Check if the block cart is activated for the animation
if (cartBlockOffset != undefined && $picture.size())
{

 

resultat:

...
// Check if the block cart is activated for the animation
if (cartBlockOffset != undefined && $picture.size())
{
 if (jsonData.hasError)
 {
  var errors = '';
  for(error in jsonData.errors)
   //IE6 bug fix
   if(error != 'indexOf')
	errors += jsonData.errors[error] + "\n";
  if (addedFromProductPage)
   $('body#product p#add_to_cart input').removeAttr('disabled').addClass('exclusive').removeClass('exclusive_disabled');
  else
   $('.ajax_add_to_cart_button').removeAttr('disabled');


  $('#'+idProduct).show();
  $('#'+idProduct).html('<div class="arrow"><div class="arrow_overlay"></div></div>'+errors);
  $('#'+idProduct).css( 'cursor', 'pointer' );
  setTimeout(function() {
   $('#'+idProduct).html('');
   $('#'+idProduct).hide();

  },5000);

  $('#'+idProduct).click(function(){
   $(this).hide();
  });
 }
 else
 {
 $picture.appendTo('body');
 $picture.css({ 'position': 'absolute', 'top': $picture.css('top'), 'left': $picture.css('left'), 'z-index': 4242 })
 .animate({ 'width': $element.attr('width')*0.66, 'height': $element.attr('height')*0.66, 'opacity': 0.2, 'top': cartBlockOffset.top + 30, 'left': cartBlockOffset.left + 15 }, 1000)
 .fadeOut(100, function() {
  ajaxCart.updateCartInformation(jsonData, addedFromProductPage);
 });
 }
}
else
 ajaxCart.updateCartInformation(jsonData, addedFromProductPage);
...

 

Dans votre page tpl (product-list.tpl ici)

ajoutez:

<div class="alert"id="{$product.id_product|escape:'htmlall':'UTF-8'}"></div>  

ajoutez la div ou vous voulez que l'erreur apparaisse..

 

pour finir un peu de css pour mettre en forme l'erreur (à modifier pour adapter à votre site):

.alert{
width:137px;
display:none;
position:absolute;
padding:10px;
border:1px solid #990000;
background:#ffcccc;
color: #645343;
font-size: 12px;
font-weight: 700;
line-height: 16px;
bottom:317px;
filter: alpha(opacity=80);
-moz-opacity: 0.8;
-khtml-opacity: 0.8;
opacity: 0.8;
}
.arrow {
position: absolute;
width: 0px;		
height: 0px;		
bottom: -15px;	  
right: 42px;		
border-top: 15px solid #990000;	  
border-right: 15px solid transparent;
border-left: 15px solid transparent;  
}
.arrow_overlay {
top: -15px;		
left: -13px;		
border-top: 13px solid  #ffcccc;	  
border-right: 13px solid transparent;
border-left: 13px solid transparent;
position:absolute;
}

 

Le resultat (ci-joint) de ces modifs va afficher une boite de dialoque rouge transparente (durant 4 secondes ou jusqu'a ce qu'on clique sur celle-ci) au dessu du champ contenant la quantité du produit à ajouter au panier.

 

j'éspere que ca aidera certains!

 

 

ps: la modif peut fonctionner sur toutes les pages utilisant le ajax-cart, il faudra cependant effectuer quelques modifications.

post-439167-0-74475800-1358335180_thumb.png

Edited by Dedra (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...