Jump to content

[RESOLU] Aide pour utiliser une requête SQL dans product et product-list.tpl : nb de produits ayant la même ref.


Recommended Posts

Bonjour,
Ce que je souhaite :
afficher : “x articles à partir de x euros (pour ceux ayant toujours le même supplier_reference), car il y aura aussi le cas du prix minimal à afficher.

J’avais trouvé une piste sur le forum (après l'avoir fouillé plusieurs heures) pour afficher le nombre total de produits de la boutique, mais ça ne marche pas (j’ai laissé la formule telle quelle sans modifier les paramètres qui m’intéressent).

Ajout dans Classes/Product.php :

static public function NombreTotalProduits() {
   $Result = Db::getInstance()->GetRow('
           SELECT COUNT(*) AS `value`
           FROM `'._DB_PREFIX_.'product`');
   return $Result["value"];
}



Ajout dans product.php :

$smarty->assign('nombre_de_produits', Tools::NombreTotalProduits());



Ajout dans product.tpl

{$nombre_de_produits}



Je place peut être mal les 2 premiers.
J’avais aussi vu une méthode en utilisant :

{php} requête {/php} directement dans le tpl concerné, mais là non plus pas de succès.

Des idées ?
Merci d'avance

Link to comment
Share on other sites

Impeccable !

C'est vraiment une erreur toute bête ! Je n'avais pas modifié cette portion pour l'adapter à Product.php;
Merci beaucoup, du coup je vais me servir de ce code comme base pour parvenir à mon résultat.
Résultat que je mettrais ici pour les futurs intéressés.

Encore merci !

Link to comment
Share on other sites

Eh bien non, il y a toujours un problème. Je n'arrive pas à adapter la requête sql pour l'afficher dans la page produit


Là ça ne marche pas

static public function NombreTotalProduits() {
   $Result = Db::getInstance()->getRow('SELECT COUNT(*) AS `value`
FROM `ps_product`WHERE `supplier_reference`=$product->supplier_reference
');
   return $Result["value"];
}



Mais si je remplace la variable par un numéro supplier_reference existant, ça marche

static public function NombreTotalProduits() {
   $Result = Db::getInstance()->getRow('SELECT COUNT(*) AS `value`
FROM `ps_product`WHERE `supplier_reference`=2302
');
   return $Result["value"];
}



L'intérêt est quand même d'utiliser la variable $product->supplier_reference. Est ce possible de l'utiliser dans Classes/Product.php ?

Link to comment
Share on other sites

Essayez de l'envoyer :

$smarty->assign('nombre_de_produits', Tools::NombreTotalProduits($product->supplier_reference)); 



=>

 
static public function NombreTotalProduits($supplier_reference=false) {
if(!$supplier_reference)
return false;     
$Result = Db::getInstance()->getRow('SELECT COUNT(*) AS `value`
FROM `ps_product`WHERE `supplier_reference`=$supplier_reference
')  ;
   return $Result["value"];
} 

Link to comment
Share on other sites

Toujours pareil, la page produit s'affiche, mais sans l'information demandée.
J'ai cependant remplacé Tools par Product dans la première portion de votre code.

Le résultat {debug} est : {$nombre_de_produits} null

Je pense que le problème vient de la clause WHERE : pourquoi si je met un unique supplier_reference ça fonctionne, et quand je le remplace par la variable, là ça ne va plus ?
Soit j'indique mal l'information et j'oublie quelque chose, soit la variable n'est pas déclarée ou ne remonte pas dans la Classe.
Même en prenant modèle sur les autres select count, je n'y arrive pas :/

edit : a nouveau avec ce code, je remplace dans la clause WHERE :

WHERE `supplier_reference`=$supplier_reference



par

WHERE `supplier_reference`=2302



et là maintenant ça marche (résultat : 4), si j'essaye autre chose, le nombre change et correspond aussi.

Link to comment
Share on other sites

je ne sui pas bien reveillé, il manque un espace et j'ai pas mis le ' au bon endroit :

$result = Db::getInstance()->getRow('SELECT COUNT(*) AS `value`
FROM `ps_product` WHERE `supplier_reference`='.$supplier_reference);


Essayez avec ceci pour vérifier que ca existe:

$smarty->assign('test', $product->supplier_reference);  

Link to comment
Share on other sites

Alors si je fais ça,

le debug confirme bien que la variable test existe et lui donne la valeur du produit sur la page actuelle (soit 2302 pour le produit que je teste)

ça me sort '2302' si je remplace la variable test par {$nombre_de_produit} dans la page produit et non pas le nombre de fois que '2302' existe dans l'ensemble de mon catalogue.

C'est pareil si je fais {$nombre_de_produit|@count}

Link to comment
Share on other sites

ça ne passe toujours pas :
voici mon code actuel sur Product.php :

static public function NombreTotalProduits($supplier_reference=false) {
if(!$supplier_reference)
return false;     
$result = Db::getInstance()->Execute('SELECT COUNT(*) AS `value`
FROM `ps_product` WHERE `$supplier_reference`='.$supplier_reference); 
   return $Result["value"];
} 


et celui sur product.php

$smarty->assign('nombre_de_produits', $product->supplier_reference); 



edit :

dans ce dernier code, il ne renvoie apparemment à la classe qui effectue la requête. Il ne sert qu'à afficher le numéro supplier_reference du produit par une autre variable.
Si je modifie en :

$smarty->assign('nombre_de_produits', Product::NombreTotalProduits($product->supplier_reference));

, là debug indique NULL

Link to comment
Share on other sites

Je viens de trouver comment y arriver partiellement en modifiant la syntaxe.

static public function NombreTotalProduits($supplier_reference) {
$sql = 'SELECT COUNT(*) AS value'
       . ' FROM `ps_product`WHERE `supplier_reference`='.$supplier_reference.'  ';
$nb = Db::getInstance()->getRow($sql);
return $nb["value"];
}



Par contre, chose étrange, ça ne marche qu'avec un supplier_reference égal à un nombre. Si c'est des lettres, ça ne marche pas. A quoi cela est il dû ?

Link to comment
Share on other sites

Parfait, ça marche aussi maintenant.
J'ai compris pas mal de choses après bien des heures, et surtout comment sont transmises les infos.
Je suis content d'avoir enfin réussi ma première fonction PHP. Je crois que je vais en faire d'autres du coup, ça me parait très intéressant.
Avant ça il faut que je l'adapte au product list via les fichiers search je pense.
Lorsque j'ai une fonction dans une Classe (Product par exemple), dois je la reproduire dans une autre classe si par exemple j'utilise cette même fonction dans une autre page.php ou la formule "$smarty->assign('nombre_de_produits', Product::NombreTotalProduits($product->supplier_reference));" suffit elle à renvoyer vers la Classe Product et utiliser cette fonction ?

En tout cas, merci de votre aide.

Link to comment
Share on other sites

Product::NombreTotalProduits() va utiliser la fonction NombreTotalProduits dans la class Product, la dupliquer pour l'avoir dans une autre class ne sert à rien. Quelque soit la page qui appelle cette fonction ca reste : Product::NombreTotalProduits

Link to comment
Share on other sites

  • 2 years later...

Bonjour,

Ce que je souhaite :

afficher : “x articles à partir de x euros (pour ceux ayant toujours le même supplier_reference), car il y aura aussi le cas du prix minimal à afficher.

 

J’avais trouvé une piste sur le forum (après l'avoir fouillé plusieurs heures) pour afficher le nombre total de produits de la boutique, mais ça ne marche pas (j’ai laissé la formule telle quelle sans modifier les paramètres qui m’intéressent).

 

Ajout dans Classes/Product.php :

static public function NombreTotalProduits() {
$Result = Db::getInstance()->GetRow('
		SELECT COUNT(*) AS `value`
		FROM `'._DB_PREFIX_.'product`');
return $Result["value"];
}

 

Ajout dans product.php :

$smarty->assign('nombre_de_produits', Tools::NombreTotalProduits());

 

Ajout dans product.tpl

{$nombre_de_produits}

 

Je place peut être mal les 2 premiers.

J’avais aussi vu une méthode en utilisant :

 

{php} requête {/php} directement dans le tpl concerné, mais là non plus pas de succès.

 

Des idées ?

Merci d'avance

 

Bonjour,

 

Ceux code ci-dessus ne fonctionne plus sur 1.5.4, quelqu'un a une idée de comment faire?

Quelqu'un peut m'aider ? merci d'avance

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