__fabrice Posted September 7, 2012 Share Posted September 7, 2012 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 More sharing options...
__fabrice Posted September 10, 2012 Author Share Posted September 10, 2012 Bonjour, Personne ne sait ?, ou personne n'as eu le cas ? F. Link to comment Share on other sites More sharing options...
unanim Posted September 10, 2012 Share Posted September 10, 2012 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 More sharing options...
jeanmiche35 Posted July 12, 2019 Share Posted July 12, 2019 bonjour et comment nettoie-on la table "cart" ? merci Link to comment Share on other sites More sharing options...
Shonen Posted December 10, 2020 Share Posted December 10, 2020 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now