Jump to content

Function getProducts retourne false


BixX

Recommended Posts

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

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 by Matt75 (see edit history)
Link to comment
Share on other sites

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

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 by Matt75 (see edit history)
  • Like 1
Link to comment
Share on other sites

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

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