Jump to content
Sign in to follow this  
kunx

Créer et récupérer le résultat d'une requête sql.

Recommended Posts

Bonjour à tous!

 

je m'explique, je voudrais créer une requête sql qui me liste les produits dont les stocks des attributs de mes déclinaisons sont égale a 1, et récupérer ce résultat. Avec un exemple se sera plus simple :-)

 

Par exemple un tee-shirt qui comporte 4 tailles différentes: S,M,L,XL.

Si le le stock de mon attributs S par exemple est égale 0, je ne veux pas que ma requête le liste.

 

et dans quel fichiers exécuter cette requête, et recuperer le resultat que je veux afficher dans mon fichier product.tpl

 

voila j'espere que vous m'avez comprit, et que quelqu'un pourra m'aider!

merci d'avance!

Share this post


Link to post
Share on other sites

Regarde mon topic, j'ai un problème du même type, mais je suis sur le point de le résoudre

(c'est à dire que j'ai des logos que j'enregistre dans plusieurs tables

et qu'avec une requête je veux récupérer les logos attribués à un produit et

donc récupérer dans mon template product.tpl le résultat de la requête.)

 

En espérant que ça t'aide même s'il est pas totalement résolu : http://www.prestashop.com/forums/topic/151441-probleme-dinterpretation-code-smartyphp/page__pid__736739__st__40#entry736739

Share this post


Link to post
Share on other sites

Bonjour! ;-) Merci beaucoup de la réponse ! j'essaie de comprendre tout ça! ^^

 

Ma requête que je veux realiser, est un peu differente du depart, apres reflexion ^^

Je voudrais faire une requete qui liste un produit dont le stock des attributs est egale a 1, et qui me revoit l'id de l'attribut du produit qui est egale a 1 ( order by rand) donc de façon aleatoire.

 

donc si j'ai bien comprit, je copie mon fichier product.php, que je met dans override/classe.

 

j'y ajoute ma variable

public &stockattribut

 

Puis je crée ma fonction

 



*/
public function get_attributstock( $id_product ) {

je ne sais pas encore comment faire ma requete.
return $attribut stock;
}

 

puis je surcharge le constructeur de la classe product.php

 

Puis je recupere ma variable dans mon fichier tpl.

 

Est-ce bien ça?

 

merci :-)

Share this post


Link to post
Share on other sites

la requete en SQL , quelque chose du genre : SELECT * FROM `ps_product_attribute` WHERE `quantity`= 1

 

Mais je vois que dans la table ps_product_attribute il n'y a pas les id_attribute, la valeur en question que je veux recuperer.

 

je vois que id_product_attribute donne l'id correspondant dans product_attribute_combination. :-/ bon c'est pas gagné tout ça.

Share this post


Link to post
Share on other sites

En faite tu travail sur un fichier que tu dois créé : Product.php (si c'est bien la fiche produit que tu veux modifié) qu'il faut mettre dans override/classes/

lass Product extends ProductCore
{
public $stockattribut;
/**
* Retourne les logos associés au produit
* @param $id_product : l'identifiant du produit
* @return la liste des logos
*/
public function get_logos( $parametreSIExiste ) {
global $cookie, $smarty;
$stockattribut = array();
$sql = TAREQUETE;
/*
echo '<br/>id_product : '.$id_product;
echo '<br/>sql: '.$sql;*/
$res = Db::getInstance()->ExecuteS($sql);
/*
echo '<br/>tableau : <br/><pre>';
print_r($res);
echo '</pre>';*/
$i=0;
if(!empty($res))
{
  foreach( $res as $r )
  {
$logos[ $parametreSIExiste ][$i]['nomAttribueAuChamp'] = $r['champ'];
$stockattribut[ $parametreSIExiste][$i]['nomAttribueAuChamp'] = $r['champ'];
$stockattribut[ $parametreSIExiste][$i]['nomAttribueAuChamp'] = $r['champ'];
$i++;
  }
 session_start();
 $_SESSION['nb']=$i;
}

return $logos;
}

public function __construct($parametreSIExiste = NULL, $full = false, $id_lang = NULL)
{
 parent::__construct($parametreSIExiste, false, $id_lang);
 $this->logos = $this->get_logos($parametreSIExiste);
}
}
?>

 

ET ensuite tu modifies ton fichier product.tpl qui se trouve dans themes/prestashop

{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->$productattribute[$parametreSIExiste] [$smarty.section.boucle.index]['nomAttribueAuChamp']}
<img width="25%" height="25%" src="http://www.lisica-informatique.fr/img/logo/{$name}" />
{/section}

 

ici $nb de section-loop il s'agit de la valeur maximum attribué à i (comme pour boucle for)

Share this post


Link to post
Share on other sites

Déjà ce qu'il serait bien c'est de définir la requête de façon plus clair :

"les produits dont les stocks des attributs de mes déclinaisons sont égale a 1, et récupérer ce résultat."

Car là c'est pas clair du tout

qu'est ce que tu cherches à faire ?

Tu utilises quel table ? si tu as en créer, elle ressemble à quoi (un MLD/MCD serait le bien venu ^^) ?

et Ensuite il faut tester la requête directement dans PHPMyAdmin se sera plus simple de commencer par une requête qui marche ;)

Après on improvisera

Share this post


Link to post
Share on other sites

Merci encore une fois de ta réponse :-) malgres que c'est encore un peu confus , j'avoue que je me suis peut-être mal exprimé .

 

je vais essayer de m'expliquer plus clairement.

 

Donc j'ai un produit , avec par exemple 10 attributs possible

exemple j'ai un produit avec comme nom de groupe " choisir sa taille" et dedans comme attribut j'ai 1,2,3,4,5,6,8,9,10, chaque attribut a pour stock /quantité 1, comme cela: 1=1 en stock ,2=1 en stock ,3=1 en stock ,4=1 en stock ainsi de suite jusque la ça va?

 

je voudrais crée une requete sql qui me recupere au hasard id_attribut dont le stock est egale a 1 est non ceux dont le stock est egale a 0

 

Quand je fais cette requete sql

SELECT * FROM `ps_product_attribute` WHERE `quantity`= 1

 

il me liste bien bien les produit dont les attributs sont egale a 1. Probleme dans la table "ps_product_attribute' il attribut une valeur "id_​product_attribute" qui correspond a mes l'id_attribut du produit , mais la valeur que je voudrais récupérer est id_attribute qui est dans la table ps_product_attribute_combination. je sais pas si je me suis bien exprimer, ce n'est pas tres evident a comprendre, en tout cas merci a toi :-)

 

 

edit image :

614371imagepresta.jpg

 

825372imagepresta2.jpg

Share this post


Link to post
Share on other sites

Alors si je comprend bien tu as :

ps_product_attribute(id_product_attribute,....,quantity)

 

ps_product_attribute(id_attribute, #id_product_attribute)

 

donc

$sql = "SELECT id_attribute

FROM ps_product_attribute pa

INNER JOIN ps_product_attribute_combination pac ON pa.id_product_attribute=pac.id_product_attribute

WHERE quantity=1;";

 

c'est bien ça ?

Share this post


Link to post
Share on other sites

OH Je dit ouii!! j'ai testé ça a l'air de fonctionner et de faire ce que je demande! MERCI MERCI BEAUCOUP! !!!

 

Alors maintenant comment crée cette requete sql, dans prestashop pour recuperer la valeur d'un id attribut au hasard juste 1 :-) et l'afficher dans product.tpl

 

en tout cas merci merci encore de prendre du temps sur mon probleme! je commençais a désespérer! :-D

Share this post


Link to post
Share on other sites

Ben déjà reprend les fichiers de ma réponse #5 au dessus (j'y ais ajouté des noms simples pour que tu comprennes plus qu'à reformuler selon tes besoins ) et pour afficher les erreurs va dans config/config.inc.php l29 : @ini_set('display_errors', 'off');

Tu met 'on'. ;) tu me diras ce que ça donne. Et on verra si je peux t'aider.

Share this post


Link to post
Share on other sites

Okey, je vias y aller doucement, car c'est un peu compliquer pour moi : alors dans mon fichier product.php que j'ai copié dans ovveride/classe

 

j'ai rajouter cela :

public $stockattribut;
/**
* Retourne les logos associés au produit
* @param $id_product : l'identifiant du produit
* @return la liste des logos
*/
public function id_attributduproduit( $parametreSIExiste ) {
global $cookie, $smarty;
$stockattribut = array();
$sql =  'SELECT id_attribute
FROM ps_product_attribute pa
INNER JOIN ps_product_attribute_combination pac ON pa.id_product_attribute=pac.id_product_attribute
WHERE quantity=1;';
/*
echo '<br/>id_product : '.$id_product;
echo '<br/>sql: '.$sql;*/
$res = Db::getInstance()->ExecuteS($sql);
/*
echo '<br/>tableau : <br/><pre>';
print_r($res);
echo '</pre>';*/
$i=100;
if(!empty($res))
{
  foreach( $res as $r )
  {
    $stockattribut[ $parametreSIExiste ][$i]['nomAttribueAuChamp'] = $r['champ'];
    $stockattribut[ $parametreSIExiste][$i]['nomAttribueAuChamp'] = $r['champ'];
    $stockattribut[ $parametreSIExiste][$i]['nomAttribueAuChamp'] = $r['champ'];
    $i++;
  }
 session_start();
 $_SESSION['nb']=$i;
}

return $stockattribut;
}

public function __construct($parametreSIExiste = NULL, $full = false, $id_lang = NULL)
{
 parent::__construct($parametreSIExiste, false, $id_lang);
 $this->stockattribut = $this->id_attributduproduit($parametreSIExiste);
}

 

mais je comprend pas trop a quoi correspond mon nom attribué au champ dans un premier temps.

on va y aller etape par etape, deja je sais si toute mes variable sont bonne, pour recuperer l'id attribut correpondant.

Share this post


Link to post
Share on other sites

Tu lui donnes le nom que tu veux pour que tu comprennes à quoi ça correspond ^^ quand tu voudras le récupérer dans le template

Share this post


Link to post
Share on other sites

Bon apres plusieurs essaie je galere totalement, ma page produit s'affiche en blanc, avec un plein d'erreur , j'ai essayer de corriger les erreur dans le product.php, je crois que je n'en n'ai plus voici mon code :

public $stockattribut;
/**
* Retourne les logos associés au produit
* @param $id_product : l'identifiant du produit
* @return la liste des logos
*/
public function attributval( $parametreSIExiste ) {
global $cookie, $smarty;
$stockattribut = array();
$sql = 'SELECT id_attribute
FROM ps_product_attribute pa
INNER JOIN ps_product_attribute_combination pac ON pa.id_product_attribute=pac.id_product_attribute
WHERE quantity=1;';
/*
echo '<br/>id_product : '.$id_product;
echo '<br/>sql: '.$sql;*/
$res = Db::getInstance()->ExecuteS($sql);
/*
echo '<br/>tableau : <br/><pre>';
print_r($res);
echo '</pre>';*/
$i=100;
if(!empty($res))
{
  foreach( $res as $r )
  {

    $stockattribut[ $parametreSIExiste ][$i]['attributval'] = $r['id_attribute'];

    $i++;
  }
 session_start();
 $_SESSION['nb']=$i;
}

return $stockattribut;
}

public function __construct($parametreSIExiste = NULL, $full = false, $id_lang = NULL)
{
 parent::__construct($parametreSIExiste, false, $id_lang);
 $this->stockattribut = $this->attributval($parametreSIExiste);
}

 

apres je ne sais pas si ma requete est bonne pour afficher ce que je veux... enfin vaguement.

 

mais j'ai erreur dans le fichier tpl pour afficher l'id_attribut.... :-/

Share this post


Link to post
Share on other sites

1 - $parametreSIExiste il faut que tu le remplaces ou que tu le supprimes si tu l'utilises pas (partout dans le fichier)

 

par exemple pour moi c'était $id_product car je l'affichais sur la fiche product n1...n3 et que la requête changeait en fonction du numéro

 

/*

echo '<br/>id_product : '.$id_product;

echo '<br/>sql: '.$sql;*/

 

Tout ce qu'il y a en commentaire tu peux le mettre en normale (hormis les commentaires explicatifs) ça permet de voir les erreurs.

Share this post


Link to post
Share on other sites

il me marque ça , c'est dans mon code du tpl :


{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->$stockattribut [$smarty.section.boucle.index]['attributval']}
{/section}

 

SmartyCompilerException: Syntax Error in template "

C:\wamp\www\prestashoptest2\prestashop/themes/prestashop/product.tpl" on line 340 "{assign var=name value=$product->$stockattribut [$smarty.section.boucle.index]['attributval']}" - Unexpected "[", expected one of: "}" , " " in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\sysplugins\smarty_internal_templatecompilerbase.php on line [i]431[/i]

Share this post


Link to post
Share on other sites

voici :

{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->$stockattribut[$parametreSIExiste] [$smarty.section.boucle.index]['attributval']}
{/section}

la j'ai laisser le $parametreSIExiste , si je l'enleve je dois le virer dans product.php aussi c'est bien ça?

Share this post


Link to post
Share on other sites

Oui si tu l'enlèves tu dois l'enlevé partout dans le product.php là c'est evident qu'il y a erreur $parametreSIExiste n'a aucune valeur

 

et désolé je me suis trompé je voulais voir le product.php ^^" (envoi product.php et les erreurs une fois $parametre viré partout)

Share this post


Link to post
Share on other sites

Alors voici j'ai mi tout les parametres en commentaire , je ne sais pas si c'est correcte.

 

public function attributval( /*$parametreSIExiste*/ ) {
global $cookie, $smarty;
$stockattribut = array();
$sql = 'SELECT id_attribute
FROM ps_product_attribute pa
INNER JOIN ps_product_attribute_combination pac ON pa.id_product_attribute=pac.id_product_attribute
WHERE quantity=1;';
echo '<br/>id_product : '.$id_product;
echo '<br/>sql: '.$sql;
$res = Db::getInstance()->ExecuteS($sql);
/*
echo '<br/>tableau : <br/><pre>';
print_r($res);
echo '</pre>';*/
$i=100;
if(!empty($res))
{
  foreach( $res as $r )
  {

    $stockattribut/*[ $parametreSIExiste ]*/[$i]['attributval'] = $r['id_attribute'];

    $i++;
  }
 session_start();
 $_SESSION['nb']=$i;
}

return $stockattribut;
}

public function __construct(/*$parametreSIExiste = NULL,*/ $full = false, $id_lang = NULL)
{
 parent::__construct(/*$parametreSIExiste,*/ false, $id_lang);
 $this->stockattribut = $this->attributval;

 

j'ai enlever celui du tpl aussi :

{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->$stockattribut [$smarty.section.boucle.index]['attributval']}
{/section}

 

j'ai cette erreur :

( ! ) SmartyCompilerException: Syntax Error in template "C:\wamp\www\prestashoptest2\prestashop/themes/prestashop/product.tpl" on line 340 "{assign var=name value=$product->$stockattribut [$smarty.section.boucle.index]['attributval']}" - Unexpected "[", expected one of: "}" , " " in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\sysplugins\smarty_internal_templatecompilerbase.php on line 431

Share this post


Link to post
Share on other sites

j'ai cette erreur la aussi :

Notice: Undefined property: Product::$attributval in C:\wamp\www\prestashoptest2\prestashop\override\classes\Product.php on line 348

Share this post


Link to post
Share on other sites

Alors  voici j'ai mi tout les parametres en commentaire , je ne sais pas si c'est correcte.

 

public function attributval( /*$parametreSIExiste*/ ) {
global $cookie, $smarty;
$stockattribut = array();
$sql = 'SELECT id_attribute
FROM ps_product_attribute pa
INNER JOIN ps_product_attribute_combination pac ON pa.id_product_attribute=pac.id_product_attribute
WHERE quantity=1;';
echo '<br/>id_product : '.$id_product;
echo '<br/>sql: '.$sql;
$res = Db::getInstance()->ExecuteS($sql);
/*
echo '<br/>tableau : <br/><pre>';
print_r($res);
echo '</pre>';*/
$i=100;
if(!empty($res))
{
   foreach( $res as $r )
   {
      
        $stockattribut/*[ $parametreSIExiste ]*/[$i]['attributval'] = $r['id_attribute'];
      
        $i++;
   }
  session_start();
  $_SESSION['nb']=$i;
}

return $stockattribut;
}

public function __construct(/*$parametreSIExiste = NULL,*/ $full = false, $id_lang = NULL)
{
  parent::__construct(/*$parametreSIExiste,*/ false, $id_lang);
  $this->stockattribut = $this->attributval;

 

j'ai enlever celui du tpl aussi :

{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->$stockattribut [$smarty.section.boucle.index]['attributval']}
{/section}

 

j'ai cette erreur :

( ! ) SmartyCompilerException: Syntax Error in template "C:\wamp\www\prestashoptest2\prestashop/themes/prestashop/product.tpl" on line 340 "{assign var=name value=$product->$stockattribut [$smarty.section.boucle.index]['attributval']}" - Unexpected "[", expected one of: "}" , " " in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\sysplugins\smarty_internal_templatecompilerbase.php on line 431

 

à mon avis l'erreur viens d'ici met un $name avant {/section} et enlève l'espace après $stockattribut

Share this post


Link to post
Share on other sites

je sais pas tu as vue le dernier message j'ai cette erreur aussi,( du coup vue que j'ai enlever les parametres

Notice: Undefined property: Product::$attributval in C:\wamp\www\prestashoptest2\prestashop\override\classes\Product.php on line 348

je vais faire ta manip je te dit quoi :

Share this post


Link to post
Share on other sites

Alors j'ai enlever l'espace j'ai une page avec produit introuvable.. et toujours cette erreur , ça avance un peu !

Notice: Undefined property: Product::$attributval in C:\wamp\www\prestashoptest2\prestashop\override\classes\Product.php on line 348

Share this post


Link to post
Share on other sites

Okey ça marche! je vais essayer encore de mon coté! en tout cas merci beaucoup de ton aide et du temps consacré , c'est gentil! a demain alors. :-)

Share this post


Link to post
Share on other sites

Me revoilà

Alors il manquait les parenthèses au niveau de la 4ème ligne :

public function __construct( $full = false, $id_lang = NULL)
{
 parent::__construct( false, $id_lang);
 $this->stockattribut = $this->attributval();
}

Share this post


Link to post
Share on other sites

Re bonjour! :-) Alors j'ai fait les modification que tu m'as donné, mais toujours des petits problemes

 

je t'envois le tout : product.php , mon code tpl, et l'erreur.

 

 

 

quand je remplace echo '<br/>id_attribute : '.$id_attribute; par $stockattribut il affiche

 

produit inexistant , et il affiche ma requête sql

 

 

 

 

 

 

 

 

voila ;-) il y a un probleme dans la requete? :-/ ou la requete ne liste pas les combinaisons du produit concerné? mhhh :-/

Edited by kunx (see edit history)

Share this post


Link to post
Share on other sites

Normale ton $id_attribute n'a aucune valeur pareil pour $stockattribute enlève cette ligne, elle me servait pour voir une de mes variables mis en paramètre de la fonction ici tu n'en as pas donc pas besoin ;)

Share this post


Link to post
Share on other sites

Oui je me disais qu'il y avait un probleme avec ça ^^ alors j'ai enlever la ligne en question ce qui me donne :

 

 

mais toujours produit introuvable avec affiche de la requete sql... :-/

petit detail je sais pas si ça a de l'importance, quand je remet les $parametreSIExiste il m'affiche le produit , avec des listes de tableaux sur ma fiche produit mais avec des erreurs du debug dedans... bon c'etait pour la remarque.

deuxieme remarque qui peut jouer peut-être dans mon fichier product.php dans class/override, j'ai du supprimer la fonction ___construct, car j'ai du crée un nouveau champ dans mon backoffice, du coup je rajoute la fonction comme dans le code ci dessus apres ma fonction.

Edited by kunx (see edit history)

Share this post


Link to post
Share on other sites

En affichant les echo de la requete, je vois bien qu'il execute mon tableau avec ma requete, mais je ne comprend pas pourquoi prestashop me marque erreur 1: produit introuvable.

 

La requete doit afficher les id_attribut disponible, pour un produit. en faite la requete ne selectionne pas le produit concerner, enfin je ne sais pas trop.

 

je me suis peut-être mal exprimer.

Pour un produit affiché je veux qu'il me liste les combinaison disponible , stock=1

TOUT mes produits on des combinaison differentes, certain on une liste de 10, d'autre 50.

 

quand j'affiche ma requete, il me liste toute mes combinaisons de ma BD, et non ceux disponible par produit, ce qui expliquerais peut etre produit introuvable.

Share this post


Link to post
Share on other sites

"1: produit introuvable" cette erreur il te l'affiche dès qu'il y a une erreur peu importe laquelle donc en faite c'est pas ça qui va nous dire où est l'erreur ^^

 

Où se trouve l'information "disponible" ?

 

Notre requête :

$sql = 'SELECT id_attribute

FROM ps_product_attribute pa

INNER JOIN ps_product_attribute_combination pac ON pa.id_product_attribute=pac.id_product_attribute

WHERE quantity=1;'

 

tu veux peut-être quand la "quantity >= 1" non ? car des quantités égale à 1 il doit pas y en avoir

Share this post


Link to post
Share on other sites

Bonjour Elisabeth :-)

Alors oui erreur 1: produit introuvable, ça se passe quand je suis sur la page product.php, le mode debug n'affiche plus d'erreur, c'est ça qui est etrange.

 

 

le code: avec erreur 1: produit introuvable.

 

ça c'est mon code

 

les quantity corresponde au stock des combinaison du produit , tout mes combinaison on un stock egale a 1.

Edited by kunx (see edit history)

Share this post


Link to post
Share on other sites

Et ta requête marche bien quand tu l'exécutes dans phpmyadmin ?

Et $i=100; ? c'est censé être égale à 0 dans mon exemple... faut que ça reste comme ça c'est juste un indice.

Share this post


Link to post
Share on other sites

Oui quand je l’exécute dans php my admin il m'affiche bien ce que je veux.

 

608224basededonn.jpg

 

les numero qui ne s'affiche pas sont bien ceux dont la quantity n'est pas egale a 1.

 

$i correspond a quoi exactement, je l'ai mi a 0 mais ça n'a rien changer, c'est pour lister mes attributs? peut importe le nombre d'attribut dans ma liste, si j'en est 100 il va tout lister c'est bien ça?

Share this post


Link to post
Share on other sites

Oui c'est en gros pour écrire un tableau

$i = 0 => premier attribut qu'il trouve

$i = 1 => Deuxieme....

mais essai d'écrire ça :

$stockattribut[$i]= $r['id_attribute'];

 

je pense c'était ça le problème j'avais mis un tableau à 2 dimensions car je voulais récupérer id_product et ensuite si trouvé pour la fiche produit n1 les infos avec un id_product=1 ^^ et toi tu ne veux pas faire en fonction de l'id_attribute

Share this post


Link to post
Share on other sites

ah okey okey, d'ou $i= 0 ;-) ça marche ^^.

 

alors j'ai remplacer le code comme comme ci dessous:

 

 

Toujours produit intoruvable comme ici :

510140test2.jpg

Edited by kunx (see edit history)

Share this post


Link to post
Share on other sites

et dans le fichier template product.tpl tu as mis quoi dans le code tu l'as modifié par rapport à l'id_attribute qu'on vient d'enlever ?

Share this post


Link to post
Share on other sites

ça c'est mon code dans product.tpl :

{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->$stockattribut[$variable][$smarty.section.boucle.index]['attributval']}
{/section}

 

non je l'ai pas modifié... dans * variable je met id_attribut?

Share this post


Link to post
Share on other sites

j'ai changé mais toujours produit introuvable... :/ donc le probleme viendrait de la requete je suppose?

Share this post


Link to post
Share on other sites

et tu supprimes bien au fur et à mesure la compilation ? dans tools/smarty ou smarty2/compile ?

car sinon toutes les modifications qu'on fait servent à rien

 

si la requête effectue bien ce que tu veux dans phpMyAdmin c'est pas un problème de requête

Share this post


Link to post
Share on other sites

C'est a dire? j'ai activer l'option pretsashop,

Forcer la compilation, et desactiver le cache, ça ne suffit pas?

Share this post


Link to post
Share on other sites

ce qui est bizard, apres je sais pas, quand je supprime la fonction construct, il m'affiche bien mon produit et le debug me fais un tableau avec une erreur undefined nb.

Share this post


Link to post
Share on other sites

Oula je sais pas là. Normalement vu que c'est une classe le construct est obligatoire.

Pour l'option je connais pas l'option mais sur le serveur ou en local il faut que tu supprimes tous les fichiers du compile que je t'ai indiqué.

Share this post


Link to post
Share on other sites

oui pour la fonction construct, c'etait une remarque si je la supprime il n'affiche plus ma requete aussi. c'etait une simple observation... :-/ donc okey je supprime les fichier dans smarty/compil, j'ai des fichier *.php et *.tmp je supprime le tout,en laissant le fichier index.php j'ai supprimer le tout, mais ça fait toujours produit introuvable. et oui tu as une option, dans l'admin de presta, preference/performance ;-)

Share this post


Link to post
Share on other sites

Quand je remet $parametreSIExiste il m'affiche mon produit, avec des erreur du debug partout. A quoi servait, ce parametres? j'ai pas tout compris la dessus.

 

edit: j'ai rien dit , ça fait pareil produit introuvable... :-/

Share this post


Link to post
Share on other sites

Alors j'ai fais tout ça, mais toujours le meme resultat, mais quand je touche a la fonction construct, j'ai du nouveau avec des nouvelle erreur mon ancien code etait :

public function __construct($full = false, $id_lang = NULL)
{
 parent::__construct($full= false, $id_lang= NULL);
 $this->stockattribut = $this->attributval();
 }

 

j'ai modifier comme cela :

public function __construct($full = false, $id_lang = NULL)
{
 parent::__construct($full, $id_lang);
 $this->stockattribut = $this->attributval();
 }

j'ai enlever dans parent::__construct les = flase et = null

 

De la il m'affiche mon produit et affiche la requete 2 fois ( 1 fois car je laisse les echo dans la requete pou voir),et cette fois ci dans ma div du produit, et m'affiche un array aussi. avec des nouvelles erreurs. alors je ne sais pas si c'est correcte ce que 'jai fait mais voici les erreur :

 

( ! ) Notice: A session had already been started - ignoring session_start() in C:\wamp\www\prestashoptest2\prestashop\override\classes\Product.php on line 332

 

ça j'ai enlevé le session dans la requete pour voir ça change rien.

 

( ! ) Notice: Undefined variable: stockattribut in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\sysplugins\smarty_internal_data.php on line 291

 

 

( ! ) Warning: htmlentities() expects parameter 1 to be string, array given in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\plugins\modifier.escape.php on line 30

 

voila alors je ne sais pas si je suis sur la bonne piste.

Share this post


Link to post
Share on other sites

Ce que j'ai moi :

public function __construct($id_product = NULL, $full = false, $id_lang = NULL)
{
 parent::__construct($id_product, false, $id_lang);
 $this->logos= $this->get_logos($id_product);
}

Regarde le false il est seul ya pas de "=" et $id_lang reste tel quel donc pour toi

public function __construct($full = false, $id_lang = NULL)
{
 parent::__construct(false, $id_lang);
 $this->stockattribut= $this->attributval();
}

Share this post


Link to post
Share on other sites

j'ai placer le code comme ci-dessus mais erreur 1:produit introuvable cette fois ci.... :-/

Share this post


Link to post
Share on other sites

Alors me revoila, j'ai trouvé la requête exacte que je veux faire qui est celle ci:

$sql = 'SELECT id_attribute
FROM ps_product_attribute pa
INNER JOIN ps_product_attribute_combination pac ON pa.id_product_attribute=pac.id_product_attribute
WHERE quantity=1
ORDER BY RAND()
LIMIT 1';

elle fonctionne, elle m'affiche bien un id_attribut au hasard, juste 1 comme je voulais, et le bute et que je voudrais juste recuperer la valeur de l'id_attribut aleatoire.plus besoin de tableau alors?

 

cette requete, va lister tout les attributs egale a 1 et m'en donnée 1 au hasard, oui mais par produit? si produit id=1 et dedans il y a 10 attribut ça va bien me donné un chiffre entre 1 et 10, ou le stock egale 1, ou lister tout mes attributs de ma liste de ma BD, ce qui n'aurais pas de sens.

 

 

et ça dans mon tpl juste ça :

{assign var=name value=$product->$stockattribut}

 

ça me met undefined strockattribut.

Share this post


Link to post
Share on other sites

En tout cas j'espere que c'est plus clair pour toi maintenant avec ça. :-)

Share this post


Link to post
Share on other sites

{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->stockattribut[$smarty.section.boucle.index]['attributval']}
{$name}
{/section}

Essai comme ça, et surtout supprime les fichiers du compile

Share this post


Link to post
Share on other sites

j'ai bien integré , ce code, mais maintenant il me marque : ( ! ) Notice: Undefined variable: nb in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\sysplugins\smarty_internal_data.php on line 291 mais question j'ai toujours besoin de mon tableau malgres que je veux recuperer juste une valeur ?

 

bon ça a changé de variable c'est deja ça ...

Share this post


Link to post
Share on other sites

{assign var=nb value=$smarty.session.nb}
{if $nb != 0}
<center>
{assign var=id value=$product->id}

{section name=boucle start=0 loop=$nb step=1}
ton code comme là
{/section}
{/if}

J'ai oublié de te donner le début

Share this post


Link to post
Share on other sites

ah okey merci!! ;-) donc maintenant changement d'erreur : ( ! ) Notice: Undefined index: attributval in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\compile\77a1e606a93272a01bb4300fad38f188371022a9.file.product.tpl.php on line 407

 

 

ça avance ça avance...

Share this post


Link to post
Share on other sites

quand je l'enleve, il m'affiche le produit, mais sans rien, plus d'erreur certe, mais j'ai pas ma variable qui s'affiche.

 

{assign var=nb value=$smarty.session.nb}
{if $nb != 0}
<center>
{assign var=id value=$product->id}

{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->stockattribut}
{$name}
{/section}
{/if}

 

ça m'affiche array

Share this post


Link to post
Share on other sites

^^ oui oui oui j'ai réedité mon message j'avais oublier le {$name} et la il maffiche array quand je met le name. ça devient bon enfin je pense... ^^ lol

Share this post


Link to post
Share on other sites

essai dans le php de mettre dans le foreach:

$stockattribut[$i] = $r['id_attribute'];

 

ça : {assign var=id value=$product->id}

tu t'en sers pas, tu peux l'enlever :)

Share this post


Link to post
Share on other sites

alors j'ai rajouter ce code, et enlever l'autre exacte il ne servait a rien ;-) mais cela me marque toujours array...

Share this post


Link to post
Share on other sites

eu je crois que j'ai trouvé... :-) enfin pas sure!!! lol mais ça a l'air de fonctionner! wouh! mais je sais pas

enfaite dans ce code

foreach( $res as $r )
  {

	$stockattribut[$i] = $r['id_attribute'];
	$i++;
  }

 

j'ai enlever le[$i] et ça m'affiche bien un chiffre qui change tout le temps a chaque rechargement.

Share this post


Link to post
Share on other sites

ici :

{assign var=name value=$product->stockattribut}

 

ya pas le [$smarty.section.boucle.index] qui correspond à $i

Share this post


Link to post
Share on other sites

Oui exacte j'ai rajouter ça, ça fonctionne aussi ça fait le meme, affiche un numero a chaque rechargement, ahlala quel bonheur quand ça marche!! merciii beaucouppp en tout cas!! apres 1 semaine dessus, on y arrive! grace a toi ! :-) c'est fort gentil en tout cas! et un grand grand merci!!! :-)

 

j'ai encore quelque question a te poser, pour finir mon projet, j'ai un bouton aleatoire, et je voudrais quil m'execute la requete a chaque fois que je clique sur le bouton , pour changer de chiffre, et pour m'afficher les combinaison disponible .

 

<input type="button" onclick="this.form.choice.value=aleatoire()"  value="bouton" > aleatoire ou j'appelerais la requete.

comment appeler une requete dans un fichier javascript?

Share this post


Link to post
Share on other sites

mhh je n'ai pas tout comprit.

ma variable qui change a chaque rechargement et {$name} c'est elle qui me donne un id_attribut dispo, ça c'est ok.

quand je fais un onclick, il appelle ma fonction aleatoire() qui a chaque clique doit me donner un numero different disponible.

donc dans ma fonction js, aleatoire(){name} si je fais juste il m'affiche le meme chiffre tout le temps?...

 

faut le declarer dans le tpl non?? j'ai fait ça en parametre dans mon fichier tpl product : var name= '{$product->stockattribut}';

dans mon fonction aleatoire : function aleatoire() {var v1=name;return v1;} ça m'affiche array.

Share this post


Link to post
Share on other sites

dans mon fonction aleatoire j'ai mit : function aleatoire()

{

var v1=name;

return v1;

 

 

}

 

quand je clique il me retourne toujours le meme chiffre... comment appeler la fonction a chaque clique? pour donner un numero dispo different.

Share this post


Link to post
Share on other sites

$my_array = array(0,1,2,3,4,5,6,7,8,9);

return array_rand($my_array);

Share this post


Link to post
Share on other sites

oups, si tu comptes le faire en smarty, met juste :

 

{assign var=valeur_aleatoire value=$name|array_rand}

 

j'espère ne pas me tromper

Share this post


Link to post
Share on other sites

Bonjour coeos.pro ;-) merci de ta réponse, malgré que c'est un peu confus.

 

je vais tout rexpliquer alors la ici c'est mon bouton :

<input type="button" onclick="this.form.choice.value=aleatoire()"  value="bouton" >

 

dans mon fichier js j'appelle aleatoire() il y a ça :

function aleatoire()
{
var v1=name;
return v1;

}

 

quand je fais ça et que je click il m'affiche toujours la meme valeur ...

 

ça c'est mon tpl qui recuperer un id_attribut au hasard ou le stock = 1 a chaque rechargement de page...

 

{assign var=nb value=$smarty.session.nb}
{if $nb != 0}
<center>

{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->stockattribut[$smarty.section.boucle.index]}
{$name}
{/section}
{/if}

 

quand je rentre ça dans mon fichier tpl il m'affiche ça:

 

{assign var=valeur_aleatoire value=$name|array_rand}

 

( ! ) Warning: array_rand() expects parameter 1 to be array, string given in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\compile\77a1e606a93272a01bb4300fad38f188371022a9.file.product.tpl.php on line 416

 

 

en faite pour faire simple je veux que quand je clique sur mon button il régénère (donc appeler la requete, a chaque clique, pour me régénérer un id_attribut au hasard ou le stock est egale a 1. je sais pas si je me suis bien expliquer.

Share this post


Link to post
Share on other sites

il t'en donne déjà un au hasard, avec ce code et tu voudrais en fait qu'autant de fois que tu cliques il t'en donne un nouveau ?

Et bien moi je le ferais pas en js, je ferais plus simple,

{assign var=nb value=$smarty.session.nb}
{if $nb != 0}
<center>
{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->stockattribut[$smarty.section.boucle.index]}
{$name}
{/section}
{if (isset("bouton"))}
{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->stockattribut[$smarty.section.boucle.index]}
{$name}
{/section}
{/if}
{/if}

Share this post


Link to post
Share on other sites

oui voila, il m'en donne un au hasard, mais bizarement tout le temps meme, meme apres avoir recharger la page...

oui voila a chaque fois que je clique il me donne un id_attribut disponible comme el fait la requete ;-)

 

quand je rentre ton code :

{if (isset("bouton"))}
{section name=boucle start=0 loop=$nb step=1}
{assign var=name value=$product->stockattribut[$smarty.section.boucle.index]}
{$name}
{/section}
{/if}

 

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\wamp\www\prestashoptest2\prestashop\tools\smarty\compile\77a1e606a93272a01bb4300fad38f188371022a9.file.product.tpl.php on line 418

Share this post


Link to post
Share on other sites

Alors ça recherche sur internet, l'équivalent de isset en smarty ;) car isset c'est du php

 

Et si tu changes le $i, en fesant start=1 ?

A mon avis en faite vu que tu as mis un RAND() il te donne plus qu'une valeur dans ton tableau au lieu de toute. Donc le $i sert à rien alors si tu enlèves le RAND() et que tu utilises ceci :

$i= rand(0, $nb); là il te donne une valeur de $i au hasard dans le tableau donc on reprend

{section name=boucle start=0 loop=$nb step=1}

{assign var=name value=$product->stockattribut[$smarty.section.boucle.index]}

{$name}

{/section}

 

et on remplace par :

 

{assign var=name value=$product->stockattribut[$i]}

{$name}

 

Essai, c'est de l'impro donc je suis pas sûre de moi. ^^

oubli pas de placer : $i= rand(0, $nb);

Share this post


Link to post
Share on other sites

Alors j'ai tester, j'ai enlever le order by rand dans la requete;

puis j'ai remplacer $i= rand(0, $nb);

j'ai mi le code du tpl

 

[/color][/size][/font][/color][/size][/font]

{assign var=nb value=$smarty.session.nb}
{if $nb != 0}
<center>



{assign var=name value=$product->stockattribut[$i]}
{$name}
{/if}

 

mais j'ai cette erreur

Notice: Undefined variable: nb in C:\wamp\www\prestashoptest2\prestashop\override\classes\Product.php on line 320

Share this post


Link to post
Share on other sites

OUPS on est en smarty

 

Je dois y aller : recherche sur le net l'équivalent de random en smarty pour faire ça : $i= rand(0, $nb);

Share this post


Link to post
Share on other sites

Mhh j'ai regardé un peu tout ça les isset d'apres ce que j'ai vue {if isset(...)} mais pas sure, et puis pour random, je crois que tu peux utiliser rand, mais se serais pas plus simple de faire une requete ajax, qui rafraichie ma fonction a chaque clique? mais je sais pas trop comment faire.

 

Enfin je bloque depuis 3 heures sur un probleme pas prévue a cause de ma fonction j'ai un message d'erreur quand je clique sur "ajouter au panier" ci-dessous, n'imaginez meme pas ma tete quand j'ai vue ça.

 

Alors j'ai chercher pendant des heures, mais rien n'y fait certe quand je desactive l'ajax du panier ça marche, mais je ne veux absolument pas le desactiver.

quand j'enleve ma fonction ___contruct (oui encore elle...) ça remarche, mais plus ma requete du coup.

public function __construct($id_product = NULL, $full = false, $id_lang = NULL)
{
 parent::__construct($id_product,$full, $id_lang);
 $this->stockattribut = $this->attributval();
 }

je sais pas pourquoi depuis le debut cette fonction ne me plait pas. enfin j'ai regarder sur le forge de presta essayez pas de mal de chose , mais rien..... donc la c'est blocage total. ça avancé d'un coté, pour avoir une erreur ailleurs... :-/

 

edit: quand j'enleve les parentheses : $this->stockattribut = $this->attributval(); ça remarche mais jai plus ma variable du coup...ne faudrais t'il pas mettre un parametres dedans du coup.

 

il manque un petit truc a la requete, elle liste toute mes combinaisons de la bd, mais je l'ai voudrais par produit, justement ce n'est pas a cause de ça que j'ai cette erreur, vue qu'il liste toute les combinaisons confondus, arrivé sur le produit il y a des id attribut qui corresponde a d'autre produit.

703025errorpanier.jpg

Share this post


Link to post
Share on other sites

donc tu as besoin de l'id_product pour ta fonction ? si oui effectivement c'est en paramètre et dans ce cas faut reprendre l'exemple de départ...

Share this post


Link to post
Share on other sites

Oui je dois afficher un attribut au hasard, mais par rapport a mon produit, je pensais a ça aussi donc si je l'integre? un truc du genre?

 

 

 

le tpl je change rien?

Edited by kunx (see edit history)

Share this post


Link to post
Share on other sites