BixX Posted October 17, 2012 Share Posted October 17, 2012 Bonjour à tous, Je ne suis d'habitude pas du genre à poser des questions sur les forums car je préfère toujours chercher par moi même. Seulement là, je bloque sur un problème que je ne saisis pas vraiment! Ce que j'essaie de faire est pourtant très simple. Je suis sur la dernière version de Prestashop, vu que certaines modifications on été faites, j'ai du adapter mon code. J'aimerai récupérer des produits associés à une categorie. Pour ce faire, j'instancie ma class Category avec un id bien spécifique puis je fais appel à la fonction getProducts(). Avant je récupérai sans problème mes produits mais là je n'obtiens que false car la requête ne retourne aucun résultat. Croyant être fou, j'ai quand même vérifié que mes produits étaient bien associés aux bonnes catégories, ce qui est le cas. J'ai ensuite testé la même fonction avec l'argument $get_total pour voir si elle me renvoyait bien des produits et c'est le cas!! Puis j'ai mis la main à la pate en touchant directement la requête. Je l'ai réduite à son minimum, c'est à dire que jai récupéré uniquement les produits dans ps_product grace à ps_category_product. Mais là non plus la requête ne me retourne absolument aucun produits!! Je me suis dis que le LIMIT ou le ORDER pouvais faire défaut. En modifiant le LIMIT à la main de 0 à 0 ça fonctionne mais de 0 à 1 c'est carrément une erreur que je récupère, ce qui est logique. En ne mettant ni LIMIT et ni ORDER c'est aussi une erreur! Quelqu'un aurait utilisé par hasard cette fonction et me dire de quelle manière? Ou est-ce que la requête de cette fonction ne serait pas logique par rapport aux tables ? Voici mon code simplifié bien sûre mais l'idée et la manière sont bien authentique: $sub = new Category(intval($sub['id_category']), $this->context->language->id); $cat->products_list = array(); $cat->products_list[] = $cat->getProducts($this->context->language->id); Merci d'avance pour votre aide Link to comment Share on other sites More sharing options...
Matt75 Posted October 17, 2012 Share Posted October 17, 2012 (edited) Bonsoir, Cela ne sert à rien de déclarer un tableau, la fonction getProducts() te renvoi un tableau contenant les produits. Ensuite te ne peux pas appeler directement la fonction, puisqu'elle a besoin de 3 paramètres au minimum, or tu n'en indique qu'un ! public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null) Comme tu le vois, tu dois au minimum indiquer l'id de la langue, le numéro de la page et le nombre de produits à renvoyer. Pour obtenir les paramètres $p et $n, il faut d'abord appeler la fonction pagination() voici comment faire : // Le numéro de la catégorie dont on veut récupérer les produits $id_category = 1; //On récupère un objet catégorie que l'on stocke dans la variable $category $category = new Category($id_category, $this->context->language->id); //On appelle la fonction productSort() qui permet de récupérer les variables $orderBy et $orderWay $this->productSort(); // On appel la fonction getProducts() une première fois qui renvoi le nombre total de produits dans la catégorie (C'est le dernier argument qui permet cela, lorsqu'il est à true) $nbProducts = $category->getProducts(null, null, null, $this->orderBy, $this->orderWay, true); //On indique le nombre total de produits dans la catégorie à la fonction pagination pour qu'elle créer les variables $p et $n $this->pagination($nbProducts); //On récupère les produits de la catégorie, sous la forme d'un tableau dans la variable $products si il n'y a pas de produits dans cette catégorie, la fonction retourne false $products = $category->getProducts($this->context->language->id, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay); Cordialement Edited October 17, 2012 by Matt75 (see edit history) Link to comment Share on other sites More sharing options...
BixX Posted October 18, 2012 Author Share Posted October 18, 2012 Merci de ta réponse si rapide ! J'avais déjà renseigné les arguments de cette manière. J'ai quand même pris en compte ton code et je viens tout juste de le tester. J'ai toujours une erreur à partir du moment ou je lui donne un limit, donc $this->n plus grand que 0 . En gros je n'ai pas le choix, c'est soit je lui donne 0 et il est content mais me renvoi false donc aucun résultat! Ou je lui dis que je veux au moins un produit et là c'est erreur 500 directement.. J'ai vérifier aussi les retour de pagination et j'ai bien 1 page pour 10 produits. Quelque chose m'échappe vraiment là. Encore merci pour l'aide Link to comment Share on other sites More sharing options...
Matt75 Posted October 18, 2012 Share Posted October 18, 2012 (edited) Tu as quelle version de Prestashop ? Je suis sur la 1.5.1 et cela fonctionne parfaitement, si ce n'est pas le cas chez toi c'est que tu as un problème... Il s'agit point par point de la méthode utilisée pour afficher les produits dans la boutique donc si cela ne fonctionne pas, tu ne devrais pas avoir de produits qui s'affichent dans la boutique, sauf si tu utilises une ancienne version de Prestashop auquel cas, il se peut que le fonctionnement soit différent, je connais pas les anciennes versions. Edited October 18, 2012 by Matt75 (see edit history) 1 Link to comment Share on other sites More sharing options...
BixX Posted October 18, 2012 Author Share Posted October 18, 2012 J'ai bien la 1.5.1 et oui c'est la methode utilisé dans la classe que je surcharge. J'ai par contre supprimé des modules et je me demande si ce n'est pas ça qui poserai problème. Je travail pas sur Prestashop en lui même mais je m'appui sur lui. Je vais verifier si mes produits sont visibles. Merci encore Link to comment Share on other sites More sharing options...
BixX Posted October 18, 2012 Author Share Posted October 18, 2012 Ok j'ai trouvé! J'appelai pas ma fonction parent init() . Forcément ça ne pouvait pas fonctionner ! Je vais me cacher maintenant. Merci encore à toi ! Link to comment Share on other sites More sharing options...
Matt75 Posted October 18, 2012 Share Posted October 18, 2012 Super ! Bon courage pour la suite. 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