Jump to content

Backoffice, clients-> paniers : beaucoup de panier à 0 euros


Recommended Posts

Bonjour,

 

J'ai une version de Prestashop 1.3.2.3, et dans l'admin, dans Clients->Paniers, lorsque je clique, c'est tres tres long.

 

La cause, je pense, c'est qu'il me sort beaucoup de paniers à 0 euro. C'est evidemment inutile.

 

Comment fairepour filter avec une requete; cela doit etre là dedans non ? :

class AdminCarts extends AdminTab
{
public function __construct()
{
	 $this->table = 'cart';
	 $this->className = 'Cart';
	$this->lang = false;
	 $this->edit = false;
	 $this->view = true;
	 $this->delete = false;


	$this->_select = 'CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`, a.id_cart as total, ca.name as carrier';
	$this->_join = 'LEFT JOIN '._DB_PREFIX_.'customer c on (c.id_customer = a.id_customer)
	LEFT JOIN '._DB_PREFIX_.'currency cu on (cu.id_currency = a.id_currency)
	LEFT JOIN '._DB_PREFIX_.'carrier ca on (ca.id_carrier = a.id_carrier)
	';

	 $this->fieldsDisplay = array(
	'id_cart' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
	'customer' => array('title' => $this->l('Customer'), 'width' => 80, 'filter_key' => 'c!lastname'),
	'total' => array('title' => $this->l('Total'), 'callback' => 'getTotalCart', 'orderby' => false, 'search' => false, 'width' => 50, 'align' => 'right', 'prefix' => '<b>', 'suffix' => '</b>', 'currency' => true),
	'carrier' => array('title' => $this->l('Carrier'), 'width' => 25, 'align' => 'center', 'callback' => 'replaceZeroByShopName'),
	'date_add' => array('title' => $this->l('Date'), 'width' => 90, 'align' => 'right', 'type' => 'datetime', 'filter_key' => 'a!date_add'));
	parent::__construct();
}

Link to comment
Share on other sites

Bjr,

Les paniers à 0 c'est que le visiteur à mis un article dans le panier et l'a ensuite supprimé du panier.

Ca arrive de temps en temps qu'il y en ai beaucoup. Lorsqu'ils se suivent à quelques seconde, c'est probablement un programme robot qui "s'amuse".

Perso, on supprime les paniers non transformés au bout de 48h afin de ne pas encombrer la base de donnée. Et on nettoie la table "cart" chaque fin d'année pour ne pas garder les paniers anciens qui fatalement se mettent à 0 si entre temps tu as retiré le produit correspondant de ta boutique.

Sans cela ça ralenti énormément l'affichage des paniers en B.O. (surtout sur un hébergement OVH).

Link to comment
Share on other sites

  • 6 years later...
  • 1 year later...

Salut,

 

Je débarde bien plus tard, mais comme j'avais le même soucis, je préfère afficher ma solution.

Mon Prestashop est version 1.6.1.19, me demandez pas pour 1.7 cette version n'existe pas pour moi.

J'ai modifié l'affichage dans le BO, pour ne plus afficher les paniers qui ne comportent pas de produits, je suis passé de 8000 paniers à 3300 paniers sur mon site client.

Pour cela, j'ai créé le fichier AdminCartsController.php dans le dossier override/controllers/admin

<?php

class AdminCartsController extends AdminCartsControllerCore
{
  public function __construct()
  {
      parent::__construct();

      $this->_select = 'CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) `customer`, a.id_cart total, ca.name carrier,
  IF (IFNULL(o.id_order, \''.$this->l('Non ordered').'\') = \''.$this->l('Non ordered').'\', IF(TIME_TO_SEC(TIMEDIFF(\''.pSQL(date('Y-m-d H:i:00', time())).'\', a.`date_add`)) > 86400, \''.$this->l('Abandoned cart').'\', \''.$this->l('Non ordered').'\'), o.id_order) AS status, IF(o.id_order, 1, 0) badge_success, IF(o.id_order, 0, 1) badge_danger, IF(co.id_guest, 1, 0) id_guest';
      $this->_join = 'LEFT JOIN '._DB_PREFIX_.'customer c ON (c.id_customer = a.id_customer)
  LEFT JOIN '._DB_PREFIX_.'currency cu ON (cu.id_currency = a.id_currency)
  LEFT JOIN '._DB_PREFIX_.'carrier ca ON (ca.id_carrier = a.id_carrier)
  LEFT JOIN '._DB_PREFIX_.'orders o ON (o.id_cart = a.id_cart)
  INNER JOIN '._DB_PREFIX_.'cart_product cp ON (cp.id_cart = a.id_cart)
  LEFT JOIN `'._DB_PREFIX_.'connections` co ON (a.id_guest = co.id_guest AND TIME_TO_SEC(TIMEDIFF(\''.pSQL(date('Y-m-d H:i:00', time())).'\', co.`date_add`)) < 1800)';

  }
}

La ligne qui change est tout simplement INNER JOIN '._DB_PREFIX_.'cart_product cp ON (cp.id_cart = a.id_cart)

Vous pouvez tout aussi bien changer le fichier source dans controllers/admin/AdminCartsController.php, pour moi c'est ligne 50. Mais un override c'est toujours mieux.

Pensez à vider le cache, et à supprimer le fichier class_index.php dans le dossier cache pour voir les modifications.

Have fun.

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...