le_binr Posted September 24, 2012 Share Posted September 24, 2012 Bonjour, J'ai en charge la mise en place d'un site web de 30 000 références. J'ai décidé de la faire à l'aide de prestashop, avec lequel je débute (mais qui me semble très bien ;-) ). Dans un premier temps je souhaiterai créer un module qui va importer un fichier XML sur mesure contenant mes 30 000 produits et de mon arborescence (plus tard je mettrai les caractéristiques, les prix...). Mais pour l'instant je bloque sur la création du module dans la partie back-office. J'ai créé un dossier "import" (nom de mon module) contenant le fichier "import.php" et la class Import (class GpImport extends Module). j'ai réussi à mettre un nouvel onglet dans le menu "Administration" qui m'ouvre une nouvelle page dans le back office (avec l'entête, le pied de page, les menus...mais le contenu blanc). class GpImport extends Module { public function __construct() { $this->name = 'import'; $this->tab = 'front_office_features'; $this->version = '1.0'; $this->author = 'mon nom'; $this->displayName = $this->l('importation XML'); $this->description = $this->l('Test module import'); parent::__construct(); } public function install() { if( !parent::install() || !$this->installModuleTab('AdminImport', array(1=>'Importation', 2=>'Importation'),17) ) return false; return true; } public function installModuleTab($tabClass, $tabName, $idTabParent) { @copy(_PS_MODULE_DIR_.$this->name.'/logo.gif', _PS_IMG_DIR_.'t/'.$tabClass.'.gif'); $tab = new Tab(); $tab->name = $tabName; $tab->class_name = $tabClass; $tab->module = $this->name; $tab->id_parent = $idTabParent; if(!$tab->save()) return false; return true; } public function uninstallModuleTab($tabClass) { $idTab = Tab::getIdFromClassName($tabClass); if($idTab != 0) { $tab = new Tab($idTab); $tab->delete(); return true; } return false; } public function uninstall() { if(!parent::uninstall() || !Configuration::deleteByName('MOD_TUTORIAL_IMG') || !$this->uninstallModuleTab('AdminImport') ) return false; return true; } } 1) Le premier problème, c'est que mon nouvelle onglet affiche le texte "AdminImport" (nom de ma class) et non pas "Importation" (voir fonction install()). Mais ça encore ce n'est pas bloquant. 2) Le deuxième problème c'est que quand je clique sur mon module avec le noueau lien créé (Back-office => Administration => bouton "AdminImport", je n'arrive pas à mettre du code HTML dans ma nouvelle page. J'ai pourtant bien créé une page nommé "AdminImport.php" avec le code : <?php class AdminGpImport extends ModuleAdminController { public function __construct() { parent::__construct(); } } Mais je ne vois pas comment mettre le texte "Veuillez sélectionner le fichier XML à importer" avec un formulaire de sélection de fichier. J'ai essayé d'utiliser les HOOK mais je ne vois pas comment accrocher une page .php dans cette nouvelle page ? Si quelqu'un connait la solution ça serait sympa de m'aiguiller. C'est peut-être une question bête mais je n'ai pas encore tous les outils pour bien comprendre le fonctionnement de prestashop. Surtout que j'ai la toute dernier version (1.5) et d'après la doc il y a des modifs au niveau des HOOK. Merci d'avance ;-) Link to comment Share on other sites More sharing options...
Ukoo - Guillaume Posted September 24, 2012 Share Posted September 24, 2012 Bonjour, Voici un tutoriel pour la création de module PS1.4 avec onglets (du Julien Breux) : http://www.julien-breux.com/2009/08/22/tutoriel-prestashop-creer-un-module-avec-onglet/ Je n'ai cependant pas compris l'intérêt de re-créer un module d'import alors que PrestaShop dispose déjà de cette fonctionnalité ? :s Link to comment Share on other sites More sharing options...
le_binr Posted September 25, 2012 Author Share Posted September 25, 2012 Salut Guillaume, merci pour ton aide ;-) Apparement depuis la version 1.5 y a une méthode précise pour gérer les controlleur, j'ai trouvé mon bonheur ici : https://github.com/prestarocket/prcustomeropinion ;-) Par contre j'affiche des informations dans ma page avec des "view helpers" : public function __construct() { $this->table = 'opinion'; $this->className = 'Opinion'; parent :: __construct(); $this->fields_list = array( 'id_opinion' => array( 'title' => '#' ), 'id_customer' => array( 'title' => $this->module->l('Customer'), 'callback' => 'getCustomerName' ), 'opinion' => array( 'title' => $this->module->l('Opinion') ), 'active' => array( 'title' => $this->module->l('Valider'), 'active' => 'status' ) ); $this->actions = array('delete'); } Mais je n'ai pas encore trouvé comment afficher simplement un texte html (par exemple <b>bonjour</b>). Merci pour votre aide, ça avance ;-) Link to comment Share on other sites More sharing options...
J. Danse Posted September 25, 2012 Share Posted September 25, 2012 N'hésitez pas à aller voir ici: http://www.prestashop.com/forums/topic/188181-doc-canvas-de-module/ Link to comment Share on other sites More sharing options...
Ukoo - Guillaume Posted September 25, 2012 Share Posted September 25, 2012 A priori vous êtes en 1.5 c'est ça ? Pour m'être déjà penché sur la création de modules 1.5 je peux vous dire que la démarche est globalement la même que pour la 1.4. Aussi procédez étape par étape. En suivant le tutoriel que je vous ai apporté (merci Julien B.) vous devriez trouver votre bonheur, et comprendre son fonctionnement pour ensuite l'appliquer à votre cas. Link to comment Share on other sites More sharing options...
J. Danse Posted September 25, 2012 Share Posted September 25, 2012 Tout dépend ce que l'on veut faire... Si la démarche de base est la même, il y a beaucoup de points différents dans la réalisation, cela dit ! Link to comment Share on other sites More sharing options...
le_binr Posted September 25, 2012 Author Share Posted September 25, 2012 Bonjour, Merci pour votre aide. Le tutorial du "canvas de module" est génial, il m'a permis de confirmer ce que j'avais compris en grapillant des informations à gauche à droite pendant 2 jours ;-) Par contre je ne vois toujours pas comment afficher un texte tout simple dans mon controller dans le back office (je débute dans prestashop, je n'ai pas encore tout saisi, mais je continu, ça permet d'apprendre ;-) ). J'ai utilisé la méthode de julien breux mais çe me fait planter l'affichage, j'ai l'impression que ce n'est pas compatible avec la 1.5. Je ne vois pas comment afficher un texte tout simple sans utiliser les "help viewer". J'ai aussi essayé de donner le chemin d'un templete, mais ça ne marche pas. Vous faites comment vous pour afficher un simple texte dans un contrôleur ? J'ai ouvert le controller de base "AdminImportControler.php" mais malgrés mes connaissance de PHP et POO c'est encore très flou. En tout cas merci pour votre aide précieuse ;-) Link to comment Share on other sites More sharing options...
J. Danse Posted September 25, 2012 Share Posted September 25, 2012 Tout dépend à quel moment et quel endroit... Dans formulaire, la liste, ou autre ? Link to comment Share on other sites More sharing options...
le_binr Posted September 25, 2012 Author Share Posted September 25, 2012 Je cherche à faire un formulaire dans lequel l'utilisateur pourra choisir un fichier (bouton parcourir) puis un bouton "importer" permettra d'importer le fichier XML choisi et de le traiter (mise à jour de la base de données de l'arbo, des produits, des caractéristiques...). Link to comment Share on other sites More sharing options...
Vinum Posted September 25, 2012 Share Posted September 25, 2012 Avec PS 1.5 pour afficher du html directement, tu peux essayer comme ceci : dans la fonction renderList. $html="<div><p>..........</p>"; du code php $html .="</div>"; $this->content=$html; 1 Link to comment Share on other sites More sharing options...
le_binr Posted October 1, 2012 Author Share Posted October 1, 2012 Bonjour, Excellent, ça fonctionne avec la fonction renderList ;-) Merci beaucoup ! Link to comment Share on other sites More sharing options...
Zulian Posted January 17, 2013 Share Posted January 17, 2013 (edited) Salut ! Je cherchais à peu près à faire la même chose, donc je complète ce topic, ça peut toujours aider ! Mon but était d'utiliser renderForm(), mais en personnalisant totalement le tpl (Pour pouvoir faire tout ce que je veux dedans). Un simple override local de l'helper montrant assez vite ses limites, et pas forcément agréable à utiliser. donc : dans renderForm() : $this->context->smarty->assign('maVariable', $ma_variable); /* test.tpl se trouve dans : 'MonModule/views/templates/admin/' */ $chemin = $this->getTemplatePath().'test.tpl'; $this->content = $this->createTemplate($chemin)->fetch(); return parent::renderForm(); En espérant que ça puisse être utile. C'est un peu plus propre et surtout plus commode que de mettre le html à afficher directement dans le controller ($html = '...'), où on se retrouve vite perdu ! Edited January 21, 2013 by Zulian (see edit history) 1 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