robinos Posted April 28, 2011 Share Posted April 28, 2011 Bonjour, j'ai depuis 2 jours un problème.Je dois rajouter des formulaires de dépôt de produits en front office. Le formulaire doit afficher des options tels que les déclinaisons et les caractéristiques dans des listes déroulantes et autres.J'ai donc intégré la page, fais mes requêtes, tout fonctionne. (http://www.carcenterpro.com/depot.php)Mais je veux intégrer la page à Prestashop et donc à smarty.J'ai donc crée un fichier depot.tpl (qui est affiché "correctement"), un fichier /controller/DepotController.php , et un fichier /classes/Depot.php .Où dois-je placer mes requêtes? Sous quelles formes dois-je les faire?Pour le moment, j'ai ça dans ma classe Depot.php: class DepotCore extends ObjectModel { public function affich_fabricant(){ $ps_manufacturer_req = "SELECT id_manufacturer, name FROM ps_manufacturer WHERE active='1'"; $ps_manufacturer = Db::getInstance()->ExecuteS($ps_manufacturer_req); while ($row=mysql_fetch_array($ps_manufacturer)) { $constructeur[] = array ('nom' => $row['name'], 'id' => $row['id_manufacturer']); } } } J'ai ca dans mon DepotController.php : class DepotControllerCore extends FrontController { public function __construct() { $this->php_self = Configuration::get('PS_HOMEPAGE_PHP_SELF'); parent::__construct(); } public function process() { parent::process(); $smarty->assign('constructeur',$constructeur); self::$smarty->assign('HOOK_HOME', Module::hookExec('home')); } public function displayContent() { parent::displayContent(); self::$smarty->display(_PS_THEME_DIR_.'depot.tpl'); } } et dans mon depot.tpl, j'ai ca : {foreach from=$constructeur item=constructeurs} {$constructeurs.name} {/foreach} Je suis au bord de la pendaison, je ne sais plus quoi faire... ceci est une requête simple d'exemple, je sais que la variable {$manufacturer} existe déjà..Merci beaucoup pour votre aide.EDIT: je suis en version 1.4 de presta avec Smarty 3 activé... Link to comment Share on other sites More sharing options...
Vincent Decaux Posted April 28, 2011 Share Posted April 28, 2011 Et donc le souci c'est comment accéder à la requête de ta classe depuis le controller ?Si c'est ça, avant l'assign, tu fais un : $constructeur = DepotCore::affich_fabricant(); En mettant aussi un "return $constructeur;" dans ta fonction. Link to comment Share on other sites More sharing options...
robinos Posted April 28, 2011 Author Share Posted April 28, 2011 Hélas, cela ne fonctionne pas...Le template bug à partir du chargement de depot.tpl (le header.tpl, est lui chargé...).Ma requête est-elle bien faite dans mon fichier de classe?? Link to comment Share on other sites More sharing options...
Vincent Decaux Posted April 28, 2011 Share Posted April 28, 2011 Hmm, tu as tenté des var_dump côté PHP pour voir si ta variable $contructeur est bien initialisée ? Et dans ton .tpl, mets uniquement : {debug}, et regarde dans la liste si tu as bien une variable Smarty {$constructeur}. Link to comment Share on other sites More sharing options...
robinos Posted April 28, 2011 Author Share Posted April 28, 2011 J'ai donc fait ceci : var_dump($constructeur['name']); Ce qui m'est retourné est NULL, j'en conclue donc qu'il y'a une erreur dans ma fonction... Link to comment Share on other sites More sharing options...
Vincent Decaux Posted April 28, 2011 Share Posted April 28, 2011 Déjà, peux-tu éditer le titre de ton post pour qu'il soit plus court... Ensuite, as-tu essayé simplement var_dump($constructeur) Car tu n'as pas de champ "name" dans cette variable, tu l'as appelé "nom" dans ta fonction. Link to comment Share on other sites More sharing options...
robinos Posted April 28, 2011 Author Share Posted April 28, 2011 J'ai déjà, en effet essayé cela sans succès.Où faut-il écrire? var_dump($constructeur) et $constructeur = DepotCore::affich_fabricant(); $smarty->assign('constructeur',$constructeur); Link to comment Share on other sites More sharing options...
robinos Posted April 29, 2011 Author Share Posted April 29, 2011 Bon j'ai changé j'ai mis dans mon fichier depot.php à la racine, pour zapper le controller et la classe.J'ai le code suivant : $ps_manufacturer = mysql_query("SELECT id_manufacturer, name FROM ps_manufacturer WHERE active='1'"); while ($row = mysql_fetch_array($ps_manufacturer)) { $smarty->assign('constructeur',$row); } include(dirname(__FILE__).'/header.php'); $smarty->display(_PS_THEME_DIR_.'depot.tpl'); include(dirname(__FILE__).'/footer.php'); ?> et dans mon fichier depot.tpl, j'ai ceci : {foreach $constructeur as $constructeurs} {$constructeurs} {/foreach} Il ne m'affiche que le dernier résultat de la requête! Link to comment Share on other sites More sharing options...
robinos Posted April 29, 2011 Author Share Posted April 29, 2011 Si ca interesse du monde, j'ai fait ca: $dsn = 'mysql:host='._DB_SERVER_.';dbname='._DB_NAME_.''; $login = _DB_USER_; $passwd = _DB_PASSWD_; $db = new PDO($dsn, $login, $passwd, array( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true)); //liste des fabricants : $ps_manufacturer = $db->prepare("SELECT id_manufacturer, name FROM ps_manufacturer WHERE active='1'"); $ps_manufacturer->execute(); $ps_manufacturer->setFetchMode(PDO::FETCH_LAZY); $smarty->assign('constructeur',$ps_manufacturer); et dans mon tpl : {foreach $constructeur as $constructeurs} {$constructeurs.name} {/foreach} et ca fonctionne: ENFIN! Link to comment Share on other sites More sharing options...
robinos Posted April 29, 2011 Author Share Posted April 29, 2011 Ceci dit cette méthode fonctionne pour une requête simple, mais là, si j'ai besoin de faire quelque chose de plus compliqué : while ($row = mysql_fetch_object($ps_nbportes)) { $id_feature_value = $row->id_feature_value; $id_feature = $row->id_feature; $req_nb_portes = mysql_query ("SELECT * FROM ps_feature_value_lang WHERE id_feature_value='".$id_feature_value."' AND id_lang='2'"); $req_nb_portes_obj = mysql_fetch_object($req_nb_portes); echo ''.$req_nb_portes_obj->value.''; } J'ai tenté ceci , mais sans succès :mon fichier php : $ps_portes = $db->prepare("SELECT * FROM ps_feature_value WHERE id_feature='6'"); $ps_portes->execute(); $ps_portes->setFetchMode(PDO::FETCH_OBJ); $smarty->assign('nbr_portes',$ps_portes); //var_dump($ps_portes->id_feature_value); $ps_nbportes = $db->prepare("SELECT * FROM ps_feature_value_lang WHERE id_feature_value='".$ps_portes->id_feature_value."' AND id_lang='2'"); $ps_nbportes->execute(); $ps_nbportes->setFetchMode(PDO::FETCH_LAZY); $smarty->assign('nb_portes',$ps_nbportes); Mon fichier .tpl : {foreach $nbr_portes as $test} {foreach $nb_portes as $portes} {$portes.value} {/foreach} {/foreach} 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