overdoze Posted November 4, 2010 Share Posted November 4, 2010 BonjourJe suis un débutant en php et PS aussi et je rencontre des problèmes lors dés récupération des variables ou des données de ma BD pour l'utiliser ailleurs dans d'autres fichier .tpl c pourquoi je demande un coup de main de la part des développeurs et le pro en programmation prestashop pour me donner quelques astuces ou des tutos afin que je ma lance dans la programmation sur PS puisqu'il est assez flexible.par exemple j'ai besoin de récupérer les quantités de déclinaisons pour chaque produit pour l'utiliser dans un autre module mais j y'arrive pas adapter ma requête sql dans le fichier php pour qu'elle soit récupérable dans le fichier tpl associés.Cordialement Link to comment Share on other sites More sharing options...
space Posted November 5, 2010 Share Posted November 5, 2010 Salut Overdoze,Aller, ça c'est cadeau /** * @return array of Groups/Attribute available for a designed product * param integer $id_product * param integer $id_lang */ private function GetAvailableAttributes($id_product, $id_lang) { return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'product_attribute` LEFT JOIN `'._DB_PREFIX_.'product_lang` ON '._DB_PREFIX_.'product_attribute.id_product = '._DB_PREFIX_.'product_lang.id_product WHERE '._DB_PREFIX_.'product_attribute.id_product = '.intval($id_product).' AND `id_lang` = '.intval($id_lang).' AND `quantity` >= 1'); } Link to comment Share on other sites More sharing options...
overdoze Posted November 5, 2010 Author Share Posted November 5, 2010 Bonjour spaceet un grand merci pour le cadeau pour ce bout de code il faut le mettre dans le fichier php non? mais comment je peut récupérer le résultat de cette requête dans le fichier Template où je veux faire le traitement des donnés? Link to comment Share on other sites More sharing options...
space Posted November 5, 2010 Share Posted November 5, 2010 Oui ça c'est la fonction php, après tu peux passer le resultat dans un smarty et l'utiliser dans ton tpl Link to comment Share on other sites More sharing options...
overdoze Posted November 5, 2010 Author Share Posted November 5, 2010 excuse moi je comprends pas ce que te dit "passer le resultat dans un smarty" !!! Link to comment Share on other sites More sharing options...
space Posted November 5, 2010 Share Posted November 5, 2010 Ah oui effectivement dsl $result = self::GetAvailableAttributes($id_product, $id_lang); $smarty->assign(array('tabResult' => $result)); Après tu peux utiliser $tabResultdans ton tpl Link to comment Share on other sites More sharing options...
overdoze Posted November 5, 2010 Author Share Posted November 5, 2010 j'ai mis votre bout de code dans le fichier php puis dans mon fichier tpl j'ai fait une boucle foreach pour teste est afficher l'id_product mais il m'affiche rienvoici la boucle{foreach from=$tabResult item=declin name=qtedeclin} {$declin.id_product}{/foreach}je crois que j'ai oublié qqe chose Link to comment Share on other sites More sharing options...
space Posted November 5, 2010 Share Posted November 5, 2010 Essayes plutôt: {foreach from=$tabResult item=declin} {$declin.id_product_attribute}{$declin.quantity} {/foreach} Tu as ainsi la liste des quantités de produits pour chaque déclinaison d'attribut Link to comment Share on other sites More sharing options...
overdoze Posted November 5, 2010 Author Share Posted November 5, 2010 non ça pas marchémais en fouillant dans le fichier php du module j'ai trouvé ce code public static function getDetailledDeclinaison($id_lang,$ean13,$reference=NULL,$id_product_attribut=NULL){ $row=array(); $id_product_attribut=$id_product_attribut?$id_product_attribut:($ean13?self::getIdProductAttributFromEan13($ean13)$reference?self::getIdProductAttributFromReference($reference):false)); if(!$id_product_attribut) return false; $row['id_product_attribute']=$id_product_attribut; $result2 = Db::getInstance()->ExecuteS(' SELECT agl.`public_name` AS public_group_name, al.`name` AS attribute_name FROM `'._DB_PREFIX_.'product_attribute_combination` pac LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.$id_lang.') LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.$id_lang.') WHERE pac.`id_product_attribute` = '.intval($id_product_attribut)); $attributesList = ''; $attributesListSmall = ''; if ($result2) foreach ($result2 AS $k2 => $row2) { $attributesList .= $row2['public_group_name'].' : '.$row2['attribute_name'].', '; $attributesListSmall .= $row2['attribute_name'].', '; } $attributesList = rtrim($attributesList, ', '); $attributesListSmall = rtrim($attributesListSmall, ', '); $row['attributes'] = $attributesList; $row['attributes_small'] = $attributesListSmall; $row['stock_quantity'] = $row['quantity_attribute']; return $row; } je croit qu'il sélectionne les les détails des déclinaisons des produit mais comment l'utiliser dans le fichier tpl Link to comment Share on other sites More sharing options...
Vincent Decaux Posted November 5, 2010 Share Posted November 5, 2010 Dans ta classe Attribute, tu as la fonction recherchée.Côté PHP, mets : $attr = new Attribute();$quantity = $attr->getAttributeQty($id_product);Puis : $smarty->assign(array( 'quantity' => $quantity ));Pour ensuite vérifier ton résultat, dans ton fichier .tpl, mets :{$quantity}, ceci t'affichera le nombre.Tu as bien compris le principe PHP / Tpl ? Chaque fichier PHP est relié au TPL, il faut bien mettre ton PHP dans le TPL concerné tout ça ? Link to comment Share on other sites More sharing options...
overdoze Posted November 5, 2010 Author Share Posted November 5, 2010 bonjour Vincent et merci de m'avoir réponduen faite la notion Tpl/PHP m'est encore un peu flousi j'ai bien compris ce que tu vient me dire c'est que j'ajoute ton bout de code après ma classe Attribute et pour vérifier je tape {$quantity} dans mon fichier .tpl, mais je la trouve pas la classe Attribute!! Link to comment Share on other sites More sharing options...
Vincent Decaux Posted November 5, 2010 Share Posted November 5, 2010 En fait, à la racine du serveur, tu peux voir plein de fichier .php, chaque fichier correspond à un fichier template de ton thème.Si tu veux utiliser la quantity des déclinaisons sur la fiche produit, il faudra mettre le code PHP dans product.php, et le {$quantity} dans product.tpl.Tu veux t'en servir pour quoi faire de cette quantité ?EDIT : la fonction getAttributeQty($id) retourne uniquement un entier en fait, qui représente la somme des quantités des déclinaisons. Du coup, utiliser la fonction de space qui est bien mieux.Mais le principe PHP / Tpl reste le même. Link to comment Share on other sites More sharing options...
overdoze Posted November 5, 2010 Author Share Posted November 5, 2010 dans ma boutique chaque produit a 3 déclinaisons, je veux faire du vente flash mais selon la quantité de la 2ème déclinaison.c pour cela je veux récupérer les quantité des déclinaisons afin de tester si la quantité de la 2éme est NULL un message "Terminée" s'affiche dans le module. Link to comment Share on other sites More sharing options...
overdoze Posted November 5, 2010 Author Share Posted November 5, 2010 j'ai essayé avec le code de space mais je croit que je n y'arrive pas seule a le déployé correctement /** * @return array of Groups/Attribute available for a designed product * param integer $id_product * param integer $id_lang */ private function GetAvailableAttributes($id_product, $id_lang) { return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'product_attribute` LEFT JOIN `'._DB_PREFIX_.'product_lang` ON '._DB_PREFIX_.'product_attribute.id_product = '._DB_PREFIX_.'product_lang.id_product WHERE '._DB_PREFIX_.'product_attribute.id_product = '.intval($id_product).' AND `id_lang` = '.intval($id_lang).' AND `quantity` >= 1'); $result = self::GetAvailableAttributes($id_product, $id_lang); $smarty->assign(array('tabResult' => $result)); } j'ai mis le code dans mon fichier php mais comment faire dans le fichier tpl? Link to comment Share on other sites More sharing options...
overdoze Posted November 13, 2010 Author Share Posted November 13, 2010 un ptit up svpj'arrive toujours pas a récupérer les quantité des déclinaisons pour chaque produitVoici le code php appelé par mon fich.tpl, comment intégrer le requête de récupération dedans pour avoir la quantité des déclinaisons dans le bloc du module.Merci d'avance Link to comment Share on other sites More sharing options...
coeos.pro Posted November 13, 2010 Share Posted November 13, 2010 Bonjour, si rien ne s'affiche le plus simple c'est de mettre {debug} dans le fichier tpl, la tu verra si ta variable est vide, null(problème lors de la requete sql) ou si il y a quelque chose (sous la forma array).A mon avis il manque des ` et des ', voici ce que je mettrais comme code : /** * @return array of Groups/Attribute available for a designed product * param integer $id_product * param integer $id_lang */ private function GetAvailableAttributes($id_product, $id_lang) { return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'product_attribute` p_a LEFT JOIN `'._DB_PREFIX_.'product_lang` p_l ON(p_a.`id_product` = p_l.`id_product`) WHERE p_a.`id_product` = '.intval($id_product).' AND p_l.`id_lang` = '.intval($id_lang).' AND p_a.`quantity` >= 1'); } Je pense qu'il est préférable de mettre le code ci dessus dans le fichier classes/Product.php (Product et non pas product)Pour utiliser la fonction (dans un fichier php) et pour l'envoi des résultats : $result = Product::GetAvailableAttributes($id_product, $id_lang); $smarty->assign('tabResult',$result); pour l'envoi, j'ai enlevé array, ca change rien c'est plus court c'est tout.Pour récupérer les valeurs dans le fichier tpl: {foreach from=$tabResult item='declinaison'} {$declinaison.id_product_attribute}{$declinaison.quantity} {/foreach} Si rien ne s'affiche, essaye avec {debug} Link to comment Share on other sites More sharing options...
overdoze Posted November 19, 2010 Author Share Posted November 19, 2010 Bonjourmerci ceoes.pro pour le coup de mainj'ai fait comme tu m'a dit :-j'ai mis le bout de code de la fonction GetAvailableAttributes dans les 2 fichiers php associés au module comme suit function GetAvailableAttributes($id_product, $id_lang) { return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'product_attribute` LEFT JOIN `'._DB_PREFIX_.'product_lang` ON '._DB_PREFIX_.'product_attribute.id_product = '._DB_PREFIX_.'product_lang.id_product WHERE '._DB_PREFIX_.'product_attribute.id_product = '.intval($id_product).' AND `id_lang` = '.intval($id_lang).' AND `quantity` >= 1'); $result = self::GetAvailableAttributes($id_product, $id_lang); $smarty->assign(array('tabResult' => $result)); } -mis la boucle foreach dans le fichier tpl associés + {debug}===>et j'ai comme résultat un messgae d'erreur : $tabResult est inconnuje suis complètement déraillé Link to comment Share on other sites More sharing options...
coeos.pro Posted November 19, 2010 Share Posted November 19, 2010 Bonjour, j'ai mis 3 codes dans le message précédent:- le premier code est à placer dans /classes/Product.php (attention mon code n'est pas le même que le votre, je n'ai pas les 2 dernières lignes qui commencent par $result et $smarty) - le deuxième est à placer dans le php qui a besoin de cette fonction- le troisième dans le fichier tplEDIT : dans la console de débogage smarty il faut chercher dans la colonne de gauche : {$tabResult} Link to comment Share on other sites More sharing options...
overdoze Posted November 19, 2010 Author Share Posted November 19, 2010 ok j'ai mis le 1er code dans le fichier classes/Product.php mais,comme je suis nul en php, comment utiliser le 2ème code dans mon fichier php?quelqu'un a une idée!! Link to comment Share on other sites More sharing options...
coeos.pro Posted November 19, 2010 Share Posted November 19, 2010 Si vous voulez afficher les quantité dans la page product alors allez à la racine du site dans le fichier product.php et rajoutez le code (le 2) et dans la page /themes/votretheme/product.tpl vous rajoutez le code (3) là où voulez afficher la quantité de déclianison. Link to comment Share on other sites More sharing options...
overdoze Posted November 19, 2010 Author Share Posted November 19, 2010 non je veux utiliser les quantités des déclinaisons pour faire des testes dans le module vente flash.ce module a 2 fichiers php : le 1er vente-flash.php et l'autre ventesflash.php qui contient la mise en page du backoffice du module.ces quantités je vais les utiliser dans le module, si c possible dans la totalité des fichier tpl du module et product.tpl, mais j'arrive pas a le faire.mon problème c comment utiliser le 2 ème code dans mon fichier php c a d le syntaxe du code 2je le met comme il est dans le fichier php $result = Product::GetAvailableAttributes($id_product, $id_lang); $smarty->assign('tabResult',$result); ou je l'affecte a une fonction?une piste svp Link to comment Share on other sites More sharing options...
overdoze Posted November 23, 2010 Author Share Posted November 23, 2010 bonjourenfin j'ai réussi a récupérer les déclinaisons existante dans ma base de donnée (environ 1830) par cette requête public function GetquantityAttributes() { return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'product_attribute` p_a'); } et l'afficher avec cette boucle {foreach from=$quantite_comb item=combina } {$combina.quantity} {/foreach} mais mois je veux juste sélectionné les déclinaisons des produits existants dans les vents flash, donc il faut récupérer les déclinaisons a travers l' $id_product.Si je met public function GetquantityAttributes($id_product) l'erreur suivante est affichée Notice: Undefined variable: id_productun coup de main svp Link to comment Share on other sites More sharing options...
coeos.pro Posted November 23, 2010 Share Posted November 23, 2010 Ceci signifie que l'identifiant du produit n'est pas stocké sous $id_product, il faut regarder dans votre fichier, c'est peut être $idProduct ou autre chose... Link to comment Share on other sites More sharing options...
overdoze Posted November 23, 2010 Author Share Posted November 23, 2010 j'ai trouvé l'identifiant $id_produit dans mon fichier php, je l'ai utilisé dans la fonction mais ça reste toujours la même notice undefined variable: id_produit Link to comment Share on other sites More sharing options...
coeos.pro Posted November 23, 2010 Share Posted November 23, 2010 Vous mettez bien public function GetquantityAttributes($id_product) pour la fonction qui fait la recherche de déclinaison, mais dans le fichier qui appelle cette fonction, vous mettez quoi ?...GetquantityAttributes($id_product) et dans ce fichier $id_product existe ? Link to comment Share on other sites More sharing options...
overdoze Posted November 23, 2010 Author Share Posted November 23, 2010 la fonction est public function GetquantityAttributes($id_produit).l'appel du fonction $smarty->assign(array( .................etc..................., '............etc..........................., 'quantite_comb' => self::GetquantityAttributes($id_produit), et $id_produit existe dans mon fichier php plus qu'une fois et utilisé dans d'autre fonctions Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now