neoweiter Posted February 4, 2016 Share Posted February 4, 2016 Bonjour à tous Je cherche a améliorer la page des fournisseurs (supplier.tpl) en y affichant une simple requete SQL personnalisée. J'ai déjà épluché tous les forums et articles, et je ne trouve pas comment faire. J'ai essayé d'ajouter ma requête dans le fichier /classes/supplier.php $query='SELECT `data` FROM `'._DB_PREFIX_.'customtable`; $sql = Db::getInstance()->ExecuteS($query); Mais je n'arrive pas a récuperer les données dans le fichier supplier.tpl situé dans le dossier de mon thème. Quelqu'un pourrait m'aider? Merci d'avance Link to comment Share on other sites More sharing options...
neoweiter Posted February 5, 2016 Author Share Posted February 5, 2016 Bonjour, Merci pour votre réponse, mais je ne lance pas ma query dans le .tpl. Je l'ai mise dans /classes/supplier.php, et essaye d'afficher le résultat sur la page supplier.tpl Voici exactement ce que j'ai fais /classes/Supplier.php public function customQuery(){ $query='SELECT `data` FROM `'._DB_PREFIX_.'customtable`'; $sql = Db::getInstance()->ExecuteS($query); $this->setTemplate(_PS_THEME_DIR_.'supplier.tpl'); } supplier.tpl dans mon dossier theme {foreach from=sql item=row} {$row.data} {/foreach} Mais rien ne s'affiche. Soit la requète n'est pas exectuée, soit les infos ne sont pas transmises au fichier template. Quelqu'un peut m'aider ? Merci beaucoup Link to comment Share on other sites More sharing options...
Johann Posted February 5, 2016 Share Posted February 5, 2016 et tu as bien un assign qui transmet le résultat de la requete à smarty ? Link to comment Share on other sites More sharing options...
neoweiter Posted February 5, 2016 Author Share Posted February 5, 2016 et tu as bien un assign qui transmet le résultat de la requete à smarty ? J'ai rajouté $this->assign("sql", $query); Mais ca ne change rien. A vrai dire, meme si j'essaye de faire un echo $query, il n'affiche même rien du tout sur la page. J'ai l'impression que mon code dans Supplier.php n'est pas interpreté Link to comment Share on other sites More sharing options...
AlexanderOs Posted February 5, 2016 Share Posted February 5, 2016 Bonjour, Il y a quoi comme donné dans votre customtable ? Link to comment Share on other sites More sharing options...
neoweiter Posted February 5, 2016 Author Share Posted February 5, 2016 Bonjour, Il y a quoi comme donné dans votre customtable ? A vrai dire c'est une requete bidon, juste pour l'exemple. Ma vraie requête fonctionne parfaitement (testée dans phpmyadmin). Je reprends, avec les infos réelles : /classes/Supplier.php public function getVignerons(){ $manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT SUBSTRING_INDEX(trim(m.name)," ",-1) lastname, CASE WHEN LENGTH(trim(m.name)) - LENGTH(REPLACE(trim(m.name), " ", "")) = 1 THEN NULL ELSE SUBSTRING_INDEX(SUBSTRING_INDEX(trim(m.name)," ",2)," ",-1) END AS middlename, SUBSTRING_INDEX(trim(m.name)," ",1) firstname, m.name, m.*, ml.`description`, ml.`short_description`, ml.`meta_title`, ml.`meta_description` FROM `vinsNaturels_manufacturer` m INNER JOIN vinsNaturels_manufacturer_shop manufacturer_shop ON (manufacturer_shop.id_manufacturer = m.id_manufacturer AND manufacturer_shop.id_shop = 1) INNER JOIN `vinsNaturels_manufacturer_lang` ml ON (m.`id_manufacturer` = ml.`id_manufacturer` AND ml.`id_lang` = 1) WHERE m.`id_manufacturer` <> 28 AND m.`active` = 1 ORDER BY lastname ASC'); $this->assign("query", $manufacturers); $this->setTemplate(_PS_THEME_DIR_.'supplier.tpl'); } THEME/supplier.tpl <ul class="vignerons-list"> {foreach from=query item=manufacturer} <li> <a href="/fr/vignerons/{$manufacturer.id_manufacturer}-{$manufacturer.link_rewrite}"><img src="/img/m/{$manufacturer.id_manufacturer}.jpg" alt="{$manufacturer.name}"></a> <p><a href="/fr/vignerons/{$manufacturer.id_manufacturer}-{$manufacturer.link_rewrite}">{$manufacturer.name}</a>{if $manufacturer.meta_title}<br>({$manufacturer.meta_title}){/if}<br>{$manufacturer.name}</p> <a class="btn" href="/fr/vignerons/{$manufacturer.id_manufacturer}-{$manufacturer.link_rewrite}">En savoir plus</a> </li> {/foreach} </ul> Et dans mon rendu front-end, j'ai ceci : <ul class="vignerons-list"> <li> <a href="/fr/vignerons/q-q"><img src="/img/m/q.jpg" alt="q"></a> <p><a href="/fr/vignerons/q-q">q</a><br>(q)<br>q</p> <a class="btn" href="/fr/vignerons/q-q">En savoir plus</a> </li> </ul> Donc c'est bien la preuve que le fichier .tpl ne recoit aucune infos dans l'array $sql. Toutes les valeurs retournent "q", et il ne crée qu'un seul <li>, alors que j'ai au moins 50 entrées en DB. Je suis largué Link to comment Share on other sites More sharing options...
Johann Posted February 5, 2016 Share Posted February 5, 2016 J'ai rajouté $this->assign("sql", $query); Mais ca ne change rien. A vrai dire, meme si j'essaye de faire un echo $query, il n'affiche même rien du tout sur la page. J'ai l'impression que mon code dans Supplier.php n'est pas interpreté déjà, c'est pas la requête que tu dois envoyer à la vue, mais le résultat et ta méthode customQuery(), elle est appelée où ? Link to comment Share on other sites More sharing options...
AlexanderOs Posted February 7, 2016 Share Posted February 7, 2016 Une fois votre méthode appelé le plus simple serai de créer une boucle qui récupère vos info dans un tableau et ensuite envoyé votre tableau au tpl pour enfin afficher ce dont vous avez besoin. Votre requête -> résultat -> foreach -> array -> smarty / dans le tpl / foreach -> $votre.résultat Bonne journée Link to comment Share on other sites More sharing options...
Prestaspirit Posted February 8, 2016 Share Posted February 8, 2016 Bonjour, Il faut assigner la variable dans le contrôleur pas dans la classe $this->assign("query", $this->getVignerons()); Le mieux c'est de créer des surcharge pour la classe et le contrôleur. Link to comment Share on other sites More sharing options...
neoweiter Posted February 8, 2016 Author Share Posted February 8, 2016 Merci pour vos réponses. J'ai essayé les 3 dernières propositions, mais rien à faire, pas moyen d'afficher les résultats de ma requête dans cette page .tpl public function getVignerons(){ $manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT SUBSTRING_INDEX(trim(m.name)," ",-1) lastname, CASE WHEN LENGTH(trim(m.name)) - LENGTH(REPLACE(trim(m.name), " ", "")) = 1 THEN NULL ELSE SUBSTRING_INDEX(SUBSTRING_INDEX(trim(m.name)," ",2)," ",-1) END AS middlename, SUBSTRING_INDEX(trim(m.name)," ",1) firstname, m.name, m.*, ml.`description`, ml.`short_description`, ml.`meta_title`, ml.`meta_description` FROM `vinsNaturels_manufacturer` m INNER JOIN vinsNaturels_manufacturer_shop manufacturer_shop ON (manufacturer_shop.id_manufacturer = m.id_manufacturer AND manufacturer_shop.id_shop = 1) INNER JOIN `vinsNaturels_manufacturer_lang` ml ON (m.`id_manufacturer` = ml.`id_manufacturer` AND ml.`id_lang` = 1) WHERE m.`id_manufacturer` <> 28 AND m.`active` = 1 ORDER BY lastname ASC'); $data = array(); foreach( $manufacturers as $manufacturer){ $data[] = $manufacturer['name']; } print_r($data); $this->assign("data", $this->getVignerons()); $smarty->setTemplate(_PS_THEME_DIR_.'supplier.tpl'); } Link to comment Share on other sites More sharing options...
coeos.pro Posted February 8, 2016 Share Posted February 8, 2016 essaye ppp($data);au lieu de print_r($data);et$this->context->smarty->assign("vignerons", $manufacturers );c'est mieux que$this->assign("data", $this->getVignerons()); ça tourne pas en rond ?rajoute {debug} dans le tpl pour voir les variable que tu aspourquoi travailler dans /classes/Supplier.php ? il faut aller dans /controllers/front/SupplierController.php, et fait directement un override de assignOne ou initContent. Link to comment Share on other sites More sharing options...
neoweiter Posted February 8, 2016 Author Share Posted February 8, 2016 essaye ppp($data); au lieu de print_r($data); et $this->context->smarty->assign("vignerons", $manufacturers ); c'est mieux que $this->assign("data", $this->getVignerons()); ça tourne pas en rond ? rajoute {debug} dans le tpl pour voir les variable que tu as pourquoi travailler dans /classes/Supplier.php ? il faut aller dans /controllers/front/SupplierController.php, et fait directement un override de assignOne ou initContent. salut, Ok j'ai déplacé ma fonction dans SupplierController.php J'ai mis $this->context->smarty->assign("vignerons", $manufacturers ); J'ai regardé dans le debug, je ne retrouve aucune de mes variables. Et je ne peux pas remplacer assignOne ou initContent car j'utilise déjà ses fonctions ailleurs 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