Jump to content

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!

Link to comment
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

Link to comment
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 :-)

Link to comment
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.

Link to comment
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)

Link to comment
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

Link to comment
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

Link to comment
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 ?

Link to comment
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

Link to comment
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.

Link to comment
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.

Link to comment
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.... :-/

Link to comment
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.

Link to comment
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]

Link to comment
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?

Link to comment
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

Link to comment
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

Link to comment
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 :

Link to comment
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

Link to comment
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)
Link to comment
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)
Link to comment
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.

Link to comment
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

Link to comment
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)
Link to comment
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?

Link to comment
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

Link to comment
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?

Link to comment
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 ;-)

Link to comment
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... :-/

Link to comment
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.

Link to comment
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();
}

Link to comment
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.

Link to comment
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 ...

Link to comment
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...

Link to comment
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

Link to comment
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.

Link to comment
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?

Link to comment
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.

Link to comment
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.

Link to comment
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.

Link to comment
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}

Link to comment
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

Link to comment
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);

Link to comment
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

Link to comment
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

Link to comment
Share on other sites

Desoler du temps de réponse , je n'etais pas la, merci, alors j'ai pas tout comprit encore une fois, oui je suis pas tres doué , la notion des inner join je connaissais pas avant ça...j'ai pas comprit en from, id_product? je te fais parvenir les modification que j'ai apporté.

 

 

 

il faut mettre : AND pp.id_product = '.(int)$id_product; je crois un truc comme ça? mais comment bien le placer dans la requete?

 

et la mon tpl modifié.

Edited by kunx (see edit history)
Link to comment
Share on other sites

$sql = 'SELECT id_attribute

FROM ps_product p

INNER JOIN ps_product_attribute pa on pa.id_product=p.id_product

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

WHERE pa.quantity=1 AND p.id_product=$id_product

ORDER BY RAND()

LIMIT 1';

 

Pouurquoi le construct est-il tout en haut de la classe ? Ya un ordre avec les objets php.

 

"public function attributval($id_product)" : ça devient logique surtout si tu as mis plus haut :

"$this->stockattribut = $this->attributval($id_product);"

 

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

 

/* ................... */

{assign var=id value=$product->id}

{assign var=nb value=$smarty.session.nb}

{if $nb != 0}

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

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

{$name}

{/section}

{/if}

Link to comment
Share on other sites

okey donc j'ai replacé la function construct en bas, autant pour moi ;-).

 

j'ai le code que tu viens de me donner, mais il y a un probleme avec AND p.id_product=$id_product quand je le met la requete n'affiche rien dans les echo et je recupere aucune variable et quand je l'enleve cela fonctionne mais attribut toujours pas par produit.

 

 

 

edit : et quand je met ceci : AND p.id_product='.($id_product);' il affiche bien les id par produit met il prend pas en compte la suite de mon sql mon limit 1 et order by rand.

Edited by kunx (see edit history)
Link to comment
Share on other sites

Cela semble etre bon, a premiere vue ^^ mercii :-)

Par contre alors avec mon button , il me marque array quand je veux afficher une valeur aleatoire dans mon input type ="text"

 

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

{$name}

 

avant c'etait cela et ça fonctionner , logique ; {assign var=name value=$product->stockattribut}

et je declare ma variable en haut du tpl comme cela :var name= '{$product->stockattribut}'; ( je dois la declarer pour ma fonction JS. sinon ça ne fonctionne pas.

et je recupere cette valeur dans mon JS apres

 

avec mon button qui appelle la fonction :

 

ça devient bon, manquera plus qu'un systeme qui appelle un id_attribut different a chaque click

Edited by kunx (see edit history)
Link to comment
Share on other sites

Oui ça fonctionne ;-) encore merci :D ,you are the best ! je demandais comment recuperer la variable id_attribut dans mon input text. la il m'affiche array, quand je clique au lieu du chiffre voila.

 

 

une des mes dernieres question, apres je te fou la paix. lol

si tu connais un systeme qui permet de rentrer automatique 500/1000 attribut dans la table, il n'y a pas une boucle qui permettrais de faire cela? je me vois mal rentrer toute ces attributs manuellement,je veux mettre ça dans la table attribut sachant que mes id_attribut sont egale a ma valeur id= 1 valeur = 1 , un script qui permet d'inserer automatiquement 500/1000 (voir plus) attribut id = 2, valeur= 2, id=3 valeur= 3,...... voila :-)

Link to comment
Share on other sites

j'assigne en parametre en haut du product.tpl

comme ceci :

var name= '{$product->stockattribut[$smarty.section.boucle.index][$id]}';

 

sur mon onclick j'appelle ma function aleatoire qui contient name. mais quand je clique il n'y a rien

et que je declare comme cela en parametres :

var name= '{$product->stockattribut}';

il m'affiche array quand je clique .

Link to comment
Share on other sites

Oui je sais, mais ça pour recuperer ma variable dans mon fichier JS il comprend pas trop vue que c'est une valeur dans un tableau c'est pour ça je pense , smarty et javascript ... enfin finalement je l'ai mis directement sur mon onclilk

<input type="button" onclick="this.form.choice.value='{$attributrand}' ;"  value="bouton" > ( j'ai changer le nom de la variable avant c'etait name, c'est plus claire pour moi) :-)

 

Quand je clic j'ai mon id_attribut disponible comme ça :-) c'est ce que je voulais faire, enfin maintenant reste a trouver un moyen de rafraichir l'id attribut a chaque clic, c'est pas gagner, si tu as des idées , elle sont les bienvenues :-) ajax?

 

et une des mes dernieres question, enfin ! soulagement tu dois te dire... lol

si tu connais un systeme qui permet de rentrer automatique 500/1000 attributs dans la table, il n'y a pas une boucle qui permettrais de faire cela? je me vois mal rentrer toute ces attributs manuellement,je veux mettre ça dans la table attribut sachant que mes id_attribut sont egale a ma valeur id= 1 valeur = 1 , un script qui permet d'inserer automatiquement 500/1000 (voir plus) attribut id = 2, valeur= 2, id=3 valeur= 3,...... voila :-)

Link to comment
Share on other sites

alors moi tous ce qui est javascript et ajax pour l'instant j'y connais pas grand chose. Ah si ! Je sais faire le copier coller ! MDR quand j'aurai fini mes études en info je le verrais surement sinon qq jours où j'aurai le courage de m'y mettre ^^

 

Pour la partie boucle oui soit tu fais un for avec une requête à l'intérieur, mais bon faut que tu es rentré dans un tableau toutes tes valeurs de id_attribute je pense. pour que à chaque +1 il ajoute la valeur suivant d'un tableau ça ferait :

 

Tableau= array(1,2,3,4,5...)

for ($i = 1; $i <= TailleTableau; $i++) {

$requete="INSERT INTO ps_product_attribute VALUES (Tableau[$i],...);"; je laisse compléter

$result=mysql_query($requete);

if($result){

echo 'enregistré';

}

}

ou alors plus simple si les valeurs de id_attribute sont successives

for ($i = 1; $i <= ValeurMAX ; $i++) {

$requete="INSERT INTO ps_product_attribute VALUES ($i,...);"; je laisse compléter

$result=mysql_query($requete);

if($result){

echo 'enregistré';

}

}

 

EDIT : c'est du php pas du smarty ( si c'est sur ta page .tpl )

Link to comment
Share on other sites

Ah okey, oui javascript et ajax, c'est un autre delire encore ça, je verrais ça avec un collègue alors qui gere assez bien ce domaine, j'ai trouvé un script qui appelle ma fonction en ajax, mais je sais pas comment rafraichir la valeur... bon je verrais ça. lol. ah ouais tu fais quoi etudes exactement? ^^ en tout cas les requete sql je crois que ça gere bien :-) ^^

 

donc la deuxieme option, ça incrementerais les valeur des id automatiquement ça? on peut el faire en sql directement cette boucle? ou en php obligatoirement c'est juste pour rentrer dans ma base de donnée. j'appellerais cette requete ou? si je l'a fait en php?

donc en gros cette boucle de la deuxieme methode, ça entrerait les values successivement, 1,2,3,4,5,6,7,8,9,10,11,12.... avec id_attribut qui s'incrementerer automatiquement donc si je remet a zero ma table, ça fonctionnerais.

 

id_attribut= values, 1=1, 2=2,3=3... c'est bien ça?

Link to comment
Share on other sites

ça incrementerais les valeur des id automatiquement ça?
Oui en faite la boucle for ou traduction "POUR i de 1 à MAX Faire ... FInPour"
j'appellerais cette requete ou? si je l'a fait en php?

 

Pour la deuxième c'est un code php, en sql tu peux rentré que la requête et même si dans PhpMyAdmin tu fais des copier coller de ta requête imagine que tu le fais pour 500 id_attribute.. pwoua

 

ça entrerait les values successivement avec id_attribut qui s'incrementerer automatiquement

Exact !

Deuxième solution :

for ($i = 1; $i <= ValeurMAX ; $i++) {

$requete="INSERT INTO ps_product_attribute VALUES ($i,...);"; je laisse compléter

$result=mysql_query($requete);

if($result){

echo 'enregistré';

}

}

 

id_attribut= values, 1=1, 2=2,3=3... c'est bien ça?

euh... en faite... values c'est un modèle.. c'est obligatoire de l'écrire ^^

http://sql.1keydata.com/fr/sql-insert-into.php

 

$requete="INSERT INTO ps_product_attribute VALUES ($i,...);";

En vérifiant les tables le id_attribute est dans ps_product_attribute_combinaison ^^

 

Si on reprend la requête alors

Dans ps_product_attribute_combinaison tu as différent champ :

`id_attribute`, `id_product_attribute`

et tous ses champs il faut les mettre INSERT INTO ps_product_attribute_comibinaison (?) VALUES (" ICI ") et tu veux mettre un id_attribut = i qui prend les valeur successives (1,2...500)

 

J'espère que tu comprends ^^

 

 

ah ouais tu fais quoi etudes exactement?

Je suis en 2ème année de BTS informatique de gestion option développeur d'applications ^^ d'où le sql, php, html, java... ;)

Link to comment
Share on other sites

:-) Alors oui je comprend un peu pres la chose, j'ai juste aps trop comprit ou je vais inserer ce cod d'insertation, crée une page php manuellement ou je me connecte a BD de presta, et j'execute ma requete? ou ailleurs?

 

Apres donc si j'ai bien compris, value je suis obliger de le definir:

$requete="INSERT INTO ps_product_attribute VALUES ($i,1,2,3,4,5,6,7,8,9... jusque 500  voir beaucoup plus);"; il n'y a pas de limite d'attribut dans presta, si j'en rentre 10000? par exemple?

 

Donc comme cela c'est bien ça? probleme alors il me faudra un soft generateur de nombre, qui me fait une liste de 1 a 10000 avec une virgule ça m'eviterait de tout taper..... lol si c'est bien ça.

 

alors pour la question des combinaison j'avais vue qu'il y avait un delire avec cette table et les id attribut et c'est la que j'avais pas tout comprit.. ahaha, ça reprend mes id attribut dans cette table oui..II donc faudrais remettre ma liste d'id attrivut de la table attribut la dedans si j'ai bien comprit,... lol je galere un peu...

 

ah oauis bts informatique specialisé dans l'application interessant tout ça ^^ et ben ça va il semble que tu geres plutot bien la chose^^, ça faisait 2 ans que je n'ai pas fait de sql/php, et j'avoue j'ai pas mal perdu... lol et tu veux faire quoi apres ce bts?

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