dubs494 Posted June 20, 2012 Share Posted June 20, 2012 (edited) Bonjour, voilà mon problème est dans le titre. J'ai une requête sql basique appellant une variable qui récupère l'id de la page catégory ou je suis. Jusqu'ici pas de problème. $idparent = Db::getInstance()->ExecuteS( "SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idcategorypage); Cependant lorsque je récupère le résultat (qui s'affiche bien), il ne fonctionne pas dans ma requête. $idsuperparent = Db::getInstance()->ExecuteS( "SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idparent); [RESOLU] Edited June 21, 2012 by dubs494 (see edit history) Link to comment Share on other sites More sharing options...
Dev On Web Posted June 20, 2012 Share Posted June 20, 2012 Topic déplacé vers développement. Bonjour, Vous ne pouvez pas utiliser $idparent comme cela. $idparent = Db::getInstance()->getValue( "SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idcategorypage); Cela me paraît déjà plus adapté. Car la, vous essayez de passe un tableau en clause WHERE... Link to comment Share on other sites More sharing options...
dubs494 Posted June 20, 2012 Author Share Posted June 20, 2012 Okay merci bien. Link to comment Share on other sites More sharing options...
TiBaker Posted November 10, 2012 Share Posted November 10, 2012 Bonjour, voilà mon problème est dans le titre. J'ai une requête sql basique appellant une variable qui récupère l'id de la page catégory ou je suis. Jusqu'ici pas de problème. $idparent = Db::getInstance()->ExecuteS( "SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idcategorypage); Cependant lorsque je récupère le résultat (qui s'affiche bien), il ne fonctionne pas dans ma requête. $idsuperparent = Db::getInstance()->ExecuteS( "SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idparent); [RESOLU] Bonjour, J'aimerais savoir ou on dois mettre des requêtes comme la votre ? pour que çà fonctionne ? Dans quelle fichier ou je ne sais pas.. Merci d'avance pour votre réponse. Link to comment Share on other sites More sharing options...
franckm1000 Posted November 10, 2012 Share Posted November 10, 2012 Ce genre de requête est une méthode utilisée dans la classe Db pour effectuer une requête sql que la base de données. Elle s'utilise dans les fichiers PHP comme par exemple les fichiers controllers, les classes ou les modules. Mais comment comptez-vous utiliser ce genre de requête alors que vous semblez ne pas du tout maitriser PHP ???? Link to comment Share on other sites More sharing options...
TiBaker Posted November 11, 2012 Share Posted November 11, 2012 Bonsoir, Merci d'avoir répondu. Pour ce qui dit maîtrise de php j'ai une bonne maîtrise c'est juste que prestashop, j'ai pas encore bien assimiliez tous ses conventions... Mon idées c'est de faire des requêtes personnaliser dans le fichier controller category par exemple jusque la ça va. C'est après je bloc pour passer mes variables vers smarty. Ce que j'aimerais savoir c'est un exemple concrète puisque sur le Forum j'ai pas trouvé. L'exemple que j'aimerais avoir c'est une requête simple dans un controller ou autres puis l'étape pour l'affiche les résultat de cette requête dans les ou le fichier .tpl. Voilà j'espère avoir était précis de la nature de mon soucie. Merci d'avance pour votre réponse. Link to comment Share on other sites More sharing options...
franckm1000 Posted November 11, 2012 Share Posted November 11, 2012 (edited) Prestashop < 1.5 (1.1 => 1.4.9) Côté PHP: global $smarty; $ma_var = Db::getInstance()->ExecuteS( "SELECT * FROM "._DB_PREFIX_."product WHERE id_product=1"); $smarty->assign('ma_variable',$ma_var); Côté TPL: {$ma_variable} Prestashop > 1.5: Côté PHP: $ma_var= Db::getInstance()->ExecuteS( "SELECT * FROM "._DB_PREFIX_."product WHERE id_product=1"); $this->context->controller->smarty->assign('ma_variable',$ma_var); Côté TPL: {$ma_variable} Attention la variable TPL que tu récupères est un tableau multidimensionnel =. Si tu veux lister des éléments tu devras utiliser foreach (qui fonctionne comme en PHP). Sinon si tu veux récupérer des singletons tu peux utiliser la méthode getrow notamment plutôt que ExecuteS Edited November 11, 2012 by franckm1000 (see edit history) 1 Link to comment Share on other sites More sharing options...
TiBaker Posted November 11, 2012 Share Posted November 11, 2012 Prestashop < 1.5 (1.1 => 1.4.9) Côté PHP: global $smarty; $ma_var = Db::getInstance()->ExecuteS( "SELECT * FROM "._DB_PREFIX_."product WHERE id_product=1"); $smarty->assign('ma_variable',$ma_var); Côté TPL: {$ma_variable} Prestashop > 1.5: Côté PHP: $ma_var= Db::getInstance()->ExecuteS( "SELECT * FROM "._DB_PREFIX_."product WHERE id_product=1"); $this->context->controller->smarty->assign('ma_variable',$ma_var); Côté TPL: {$ma_variable} Attention la variable TPL que tu récupères est un tableau multidimensionnel =. Si tu veux lister des éléments tu devras utiliser foreach (qui fonctionne comme en PHP). Sinon si tu veux récupérer des singletons tu peux utiliser la méthode getrow notamment plutôt que ExecuteS Bonjour, Et te remercie de répondre à ma pro problématique. Je vais tester... c'est surtout $this->context->controller->smarty->assign('ma_variable',$ma_var); que je ne savais pas... Merci encore une fois et je vous tiens au courant. Bon dimanche Link to comment Share on other sites More sharing options...
franckm1000 Posted November 11, 2012 Share Posted November 11, 2012 C'est la nouvelle façon d'appeler la variable smarty dur prestashop 1.5. A noter que la méthode "traditionnelle" avec global $smarty et $smarty->assign(...) fonctionne également sur la 1.5 Link to comment Share on other sites More sharing options...
TiBaker Posted November 11, 2012 Share Posted November 11, 2012 (edited) C'est la nouvelle façon d'appeler la variable smarty dur prestashop 1.5. A noter que la méthode "traditionnelle" avec global $smarty et $smarty->assign(...) fonctionne également sur la 1.5 Ok merci pour l'info. Mais je reviens vers vous, je viens d'ajouter une requête pour tester (elle n'est pas super propre). Dans mon fichier : /override/classes/controller/FrontController.php. La requête : $ma_var= Db::getInstance()->getrow("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3"); $this->context->controller->smarty->assign('ma_variable',$ma_var); Dans la table "category_lang" je vais selectionner la 1er ligne qui a pour valeur "3" dans la colonne "id_category". Dans mon fichier .tpl : footer.tpl, j'ai mis : {if isset($ma_variable)}{$ma_variable}{/if}. Et là j'ai une page blanche ! Je pense que c'est ma requête qui n'est pas bonne. J'ai essayé dans le fichier : /classes/controller/FrontController.php. Idem page blanche... Merci d'avance. Edited November 11, 2012 by BakerSky (see edit history) Link to comment Share on other sites More sharing options...
TiBaker Posted November 11, 2012 Share Posted November 11, 2012 (edited) C'est la nouvelle façon d'appeler la variable smarty dur prestashop 1.5. A noter que la méthode "traditionnelle" avec global $smarty et $smarty->assign(...) fonctionne également sur la 1.5 J'ai essayé une fonction, il me fait plus page blanche mais il ne me retourne pas la valeur ou les... exmple : public function catedisnt(){ $ma_var = Db::getInstance()->ExecuteS("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3"); foreach ($ma_var as $list_ma_var){ $this->context->controller->smarty->assign('ma_variable',$list_ma_var['name']); } } Vous pensez ? quoi. PS : si je mets pas dans une fonction il me mets page blanche. Edited November 11, 2012 by BakerSky (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted November 11, 2012 Share Posted November 11, 2012 (edited) Attention, vous êtes dans des classes, donc vous êtes obligé de le mettre dans une fonction ! d'où la page blanche Mais si ensuite vous n'appelez pas la fonction, ça ne va rien faire. Avant de le faire en override, éditez plutôt simplement le fichier: classes/controller/frontcontroller.php en ajoutant à la fin juste avant le dernier }: public function displaycontent() { $ma_var= Db::getInstance()->getrow("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3"); $this->context->controller->smarty->assign('ma_variable',$ma_var); } Edited November 11, 2012 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
TiBaker Posted November 11, 2012 Share Posted November 11, 2012 Attention, vous êtes dans des classes, donc vous êtes obligé de le mettre dans une fonction ! d'où la page blanche Mais si ensuite vous n'appelez pas la fonction, ça ne va rien faire. Avant de le faire en override, éditez plutôt simplement le fichier: classes/controller/frontcontroller.php en ajoutant à la fin juste avant le dernier }: public function displaycontent() { $ma_var= Db::getInstance()->getrow("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3"); $this->context->controller->smarty->assign('ma_variable',$ma_var); } J'ai toujours rien ! C'est bizarre quand même; J'ai édité le fichier classes/controller/FrontController.php et j'ai supprimé bien sûre la function dans l'autre fichier /override/classes/controller/frontcontroller.php. Votre function il me fait aussi page blanche parce-que il y a une autre function du même nom à la ligne -> 529 : /** * 1.4 retrocompatibility - will be removed in 1.6 */ public function displayContent() { } Je bloc grave sur pour une requête grave quoi. Link to comment Share on other sites More sharing options...
TiBaker Posted November 11, 2012 Share Posted November 11, 2012 (edited) J'ai toujours rien ! C'est bizarre quand même; J'ai édité le fichier classes/controller/FrontController.php et j'ai supprimé bien sûre la function dans l'autre fichier /override/classes/controller/frontcontroller.php. Votre function il me fait aussi page blanche parce-que il y a une autre function du même nom à la ligne -> 529 : /** * 1.4 retrocompatibility - will be removed in 1.6 */ public function displayContent() { } Je bloc grave sur pour une requête grave quoi. Attention, vous êtes dans des classes, donc vous êtes obligé de le mettre dans une fonction ! d'où la page blanche Mais si ensuite vous n'appelez pas la fonction, ça ne va rien faire. Avant de le faire en override, éditez plutôt simplement le fichier: classes/controller/frontcontroller.php en ajoutant à la fin juste avant le dernier }: public function displaycontent() { $ma_var= Db::getInstance()->getrow("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3"); $this->context->controller->smarty->assign('ma_variable',$ma_var); } Pour autant dans le fichier /override/classes/controller/frontcontroller.php; j'ai une function qui fonctionne très bien ! cette function : public function process(){ global $cookie; $parent = new Category(Tools::getValue('id_category'), intval($cookie->id_lang)); $listing = $parent->getParentsCategories($cookie->id_lang); foreach ($listing as $list) { if($list['level_depth']==2) { self::$smarty->assign('parent',$list['id_category']); self::$smarty->assign('parent_nom',$list['name']); break; } } } Je fais appel dans toute mes .tpl çà fonctionne sauf sur la page produit ! J'ai bien {$parent} ou {parent_nom} Mais c'est pour les requêtes ça fonctionne pas, c'est dommage! Edited November 11, 2012 by BakerSky (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted November 11, 2012 Share Posted November 11, 2012 Eh bien intégrez votre requête dans cette fonction process. 1 Link to comment Share on other sites More sharing options...
TiBaker Posted November 11, 2012 Share Posted November 11, 2012 Eh bien intégrez votre requête dans cette fonction process. Or çà fonctionne enfin !!!!! poufffffff Merci Bien franckm1000 franchement merci. Link to comment Share on other sites More sharing options...
TiBaker Posted November 11, 2012 Share Posted November 11, 2012 Eh bien intégrez votre requête dans cette fonction process. Dernière chose, je fais un foreach mais ça me retourne qu'une seule ligne. Ma function : $req = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'category_lang`'); foreach ($req as $f){ if($f['id_category']==3) { self::$smarty->assign('req_cat',$f['name']); } } Et pourtant j'ai plusieurs ligne qui a pour valeur 'id_category' = 3, j'ai essayé le while ça fonctionne pas. Merci d'avance. Link to comment Share on other sites More sharing options...
franckm1000 Posted November 11, 2012 Share Posted November 11, 2012 (edited) Normal, car tu renvoies à chaque boucle la dernière valeur de ton tableau dans req_cat. Donc il te retournera la dernière valeur de ton tableau puisque entre temps il aura effacé toutes les autres ! Le mieux est de traiter le tableau dans le fichier tpl. Côté PHP: $req = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'category_lang`'); self::$smarty->assign('req_cat', $req); Côté TPL: {foreach from=$req_cat item=iteration} {if $iteration.id_category==3} {$iteration.name}<br /> {/if} {/foreach} Sinon côté PHP tu peux faire ça: $req = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'category_lang`'); foreach ($req as $f){ if($f['id_category']==3) { $tableau[]=$f['name']; } } self::$smarty->assign('req_cat',$tableau); Mais côté TPL tu devras aussi faire un foreach car tu as un tableau. Seule différence, ton tableau ne contient déjà plus que les éléments de la catégorie 3 Edited November 11, 2012 by franckm1000 (see edit history) 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