renaud2263 Posted May 19, 2016 Share Posted May 19, 2016 Bonsoir à Tous, Après bien des galères pour créer mon 1er module admin, j'ai pu, grâce à la généreuse aide de membres de ce forum, afficher mon premier "hello world". Yeah ! J'ai donc mon module "Renaud', et dans ce module un dossier controllers/admin qui contient le fichier AdminRenaudController.php. Dans ce fichier la classe class AdminRenaudController extends ModuleAdminController Mon but est de créer un petit formulaire qui permet de sélectionner une semaine N° X. Si on sélectionne la semaine N° 22, par exemple, et qu'on le poste, alors je vais chercher les ventes de produits pour la semaine demandée. J'ai lu des tonnes de tutoriels et je m'y perds un peu. 1ère question: est ce que tout se passe dans AdminRenaudController.php ou dans le fichier du module renaud.php ? Voila ce que j'ai fait dans le contrôleur : public function renderForm(){ $options = array( array( 'id_option' => 1, 'name' => 'Renaud' ), array( 'id_option' => 2, 'name' => 'Marco' ), ); $this->fields_form = array( 'legend' => array( 'title' => $this->l('Choose a week to see the sales'), ), 'input' => array( array( 'type' => 'select', 'label' => $this->l('Select a week:'), 'name' => 'invoice', 'required' => true, 'options' => array( 'query' => $options, 'id' => 'id_option', 'name' => 'name', ), ), ), 'submit' => array( 'title' => $this->l('See the results'), 'class' => 'btn btn-default pull-right' ) ); return parent::renderForm(); } Bien sûr les option du select ne sont qu'un test (en réalité j'ai réussi à créer un sélecteur de semaine). Mais 2ème question: dans le array options, comment pré-sélectionner une option ? Et surtout: quelle fonction native de PS je dois utiliser pour interroger la BDD et restituer les résultats sous forme d'un tableau HTML avec totaux ? Je suppose que c'est postProcess mais j'ai essayé : public function postProcess(){ $MaValeur = Tools::getValue("invoice"); echo $MaValeur; parent::postProcess(); } Mais il semble que le echo ne soit pas le bienvenue ici. Il me retourne bien la valeur de l'option, mais pas sur la page. C'est beaucoup de demande, mais déjà je voudrais savoir quelle fonction utiliser pour afficher les résultats du POST. Dois-je utiliser un template ? Pour le formulaire ? Pour les résultats ? Bien humblement, merci. Link to comment Share on other sites More sharing options...
kevingic Posted May 20, 2016 Share Posted May 20, 2016 Le Tools::getValue('invoice'); est fonctionnel dans ton cas, il retournera bien la valeur de ton select mais je n'ai pas l'impression que ton select soit créer de la bonne manière, Essaye de t'inspirer du code ci-dessous pour ton select, il y a de grande change que sa marche array( 'type' => 'select', 'label' => $this->l('Enable search by date in front office :'), 'name' => 'search_by_date', 'values' => array( array( 'value' => 1, 'label' => $this->l('Yes') ), array( 'value' => 0, 'label' => $this->l('No'), 'checked' => 'checked' ) ), ), Link to comment Share on other sites More sharing options...
renaud2263 Posted May 20, 2016 Author Share Posted May 20, 2016 Bonjour, Pour le select et le pré-selected, j'ai trouvé ceci qui fonctionne : $this->fields_value['invoice'] = 1 Par contre, là où je galère vraiment c'est pour la fonction qui reçoit le POST - je pense que c'est postProcess() - et qui affiche les résultats (en l'occurrence, pour moi un tableau HTML issu de données de la BDD). Quand je fais un : public function postProcess(){ $MaValeur = Tools::getValue("invoice"); echo $MaValeur; parent::postProcess(); } La valeur s'affiche mais en dessus du header PS. Je ne sais pas si je dois utiliser un template, mais j'aimerais bien afficher le résultat sur la page... Link to comment Share on other sites More sharing options...
kevingic Posted May 20, 2016 Share Posted May 20, 2016 Ou es-ce que tu veux afficher ta variable? Link to comment Share on other sites More sharing options...
renaud2263 Posted May 20, 2016 Author Share Posted May 20, 2016 ben sur la page, sous mon select. l'idée étant quand même d'afficher le résultat de ma requête sql sous forme de tableau html Link to comment Share on other sites More sharing options...
renaud2263 Posted May 20, 2016 Author Share Posted May 20, 2016 (edited) En gros je veux, dans mon controler: 1- Afficher un formulaire avec un select 2- Recevoir les données, interroger la BDD et afficher le résultat. Tout se passe dans le BO où j'ai crée un module, avec lien menu. Hors Prestashop, il me faut 10mn, mais là....je patauge. Tout echo produit une erreur de header already sent.... Edited May 20, 2016 by renaud2263 (see edit history) Link to comment Share on other sites More sharing options...
renaud2263 Posted May 21, 2016 Author Share Posted May 21, 2016 (edited) Après bien des errances, voici ce que j'ai fait dans le controller admin de mon module : public function renderForm() { $debut_sem = $this->dateFromWeek($this->date_debut); //echo $debut_sem; $year = date('Y'); $sem = date('W'); for($i=$debut_sem;$i<=date('W');$i++){ $sem_liste = $this->get_lundi_samedi_from_week($i,$year); ($sem == $i) ? $this->fields_value['invoice'] = $i : $this->fields_value['invoice'] = ''; ; $options[] = array('id_option'=>$i, 'name'=>'Week N° '.$i.' (from '.$sem_liste[0].' to '.$sem_liste[1].')'); } $this->fields_form = array( 'legend' => array( 'title' => $this->l('Choose a week to see the sales'), /*'image' => '' */ ), 'input' => array( array( 'type' => 'select', 'label' => $this->l('Select a week:'), 'name' => 'invoice', 'required' => true, 'options' => array( 'query' => $options, 'id' => 'id_option', 'name' => 'name', ), ), ), 'submit' => array( 'title' => $this->l('See the results'), 'class' => 'btn btn-default pull-right' ) ); return parent::renderForm(); } public function postProcess() { if (Tools::isSubmit('invoice')) { $sem = Tools::getValue("invoice"); $sql = "SELECT ca.product_id, ca.product_name, ca.product_supplier_reference, SUM(ca.product_quantity) AS qte, purchase_supplier_price, (ca.purchase_supplier_price * qte) AS tot_line FROM "._DB_PREFIX_."order_detail ca LEFT JOIN "._DB_PREFIX_."orders c ON ca.id_order = c.id_order WHERE (YEAR(DATE(c.delivery_date)) = '".$this->year."' AND WEEK(DATE(c.delivery_date)) = '".$sem."') GROUP BY ca.product_id ORDER BY ca.product_supplier_reference"; $tab_data = ''; if ($res = Db::getInstance()->ExecuteS($sql)){ foreach ($res as $row){ //$output .= $row['product_name'].' :: '.$row['qte'].'<br />'; OUTPUT EST OK LA REQ EST OK $tab_data .= '<tr><td>'.$row['product_id'].'</td><td>'.$row['product_supplier_reference'].'</td><td>'.$row['product_name'].'</td> <td>'.$row['qte'].'</td><td>'.$row['purchase_supplier_price'].'</td><td>'.$row['tot_line'].'</td></tr>'; } } $this->context->smarty->assign('tab_data', $tab_data); return parent::postProcess(); } } public function getTemplatePath() { return _PS_MODULE_DIR_.$this->module->name.'/views/templates/admin/'; } public function createTemplate($tpl_name) { if (file_exists($this->getTemplatePath() . $tpl_name) && $this->viewAccess()) return $this->context->smarty->createTemplate($this->getTemplatePath() . $tpl_name, $this->context->smarty); return parent::createTemplate($tpl_name); } } Puis dans mon template "content.tpl", pour test, j'ai mis : <table> <tr><td>Les résultats:</td></tr> {$tab_data|default:' '} </table> Mais cela ne fonctionne pas: quand je charge ma page, c'est le contenu du template "Les résultats :" sans les variables, qui s'affiche à la place du formulaire. Et si je supprime la fonction "createTemplate" le formulaire s'affiche bien avec le select, mais, évidemment, quand je le poste, aucun résultat ne s'affiche Edited May 21, 2016 by renaud2263 (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