{"id":472,"date":"2019-06-14T16:05:17","date_gmt":"2019-06-14T14:05:17","guid":{"rendered":"https:\/\/numa-bord.com\/miniblog\/?p=472"},"modified":"2019-06-20T12:42:30","modified_gmt":"2019-06-20T10:42:30","slug":"prestashop-les-bases-dun-module-crud","status":"publish","type":"post","link":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/","title":{"rendered":"Prestashop : Les bases d&rsquo;un module CRUD"},"content":{"rendered":"<p>Cet article va pr\u00e9senter comment cr\u00e9er un \u00ab\u00a0module de test\u00a0\u00bb pour prestashop. L&rsquo;objectif \u00e9tant d&rsquo;avoir une base de code sur laquelle on pourra partir pour ensuite r\u00e9pondre \u00e0 des demandes plus concr\u00e8tes. Ce module va cr\u00e9er une table dans la base de donn\u00e9e et ajouter un menu dans le tableau d&rsquo;administration de prestashop. Lors du clic sur ce menu on aura la possibilit\u00e9 de lire la table correspondante, y ins\u00e9rer\/modifier ou supprimer des lignes. (CRUD)<\/p>\n<p>Cet article contiendra peu d&rsquo;explications (en dehors des commentaires dans le code) car il va surtout me servir de r\u00e9f\u00e9rence pour de prochains articles. Vous pouvez aussi consulter cet artice (en anglais) un peu plus d\u00e9taill\u00e9 : <a href=\"https:\/\/www.amauri.eng.br\/en\/blog\/2016\/03\/developing-a-simple-module-with-crud-for-prestashop\/\">https:\/\/www.amauri.eng.br\/en\/blog\/2016\/03\/developing-a-simple-module-with-crud-for-prestashop\/<\/a><\/p>\n<p>Pour commencer nous cr\u00e9ons dans le dossier \u00ab\u00a0modules\u00a0\u00bb de prestashop notre dossier \u00ab\u00a0moduletest\u00a0\u00bb et dans ce dossier le fichier \u00ab\u00a0moduletest.php\u00a0\u00bb suivant : <\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"php codecolorer\"><span class=\"co1\">\/\/pour \u00e9viter un acc\u00e8s direct \u00e0 ce fichier.<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><a href=\"http:\/\/www.php.net\/defined\"><span class=\"kw3\">defined<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'_PS_VERSION_'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/exit\"><span class=\"kw3\">exit<\/span><\/a><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/on appelle le fichier de ce module &quot;\/classes\/ModuleTestTableTest.php&quot; que l'on va cr\u00e9er dans la partie suivante.<\/span><br \/>\n<span class=\"kw1\">require_once<\/span> <a href=\"http:\/\/www.php.net\/dirname\"><span class=\"kw3\">dirname<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"kw4\">__FILE__<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">'\/classes\/ModuleTestTableTest.php'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw2\">class<\/span> Moduletest <span class=\"kw2\">extends<\/span> Module<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/constructeur du module avec les informations \u00e0 personnaliser.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> __construct<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">name<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'moduletest'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">tab<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'administration'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">version<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'0.1.0'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">author<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'auteur de test'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">need_instance<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">ps_versions_compliancy<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'min'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'1.7'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'max'<\/span> <span class=\"sy0\">=&gt;<\/span> _PS_VERSION_<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; parent<span class=\"sy0\">::<\/span>__construct<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">displayName<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Nom du module de test'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">description<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Description du module de test.'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/fonction d'installation du module<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> install<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> parent<span class=\"sy0\">::<\/span><span class=\"me2\">install<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">&amp;&amp;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">installSql<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">&amp;&amp;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">installTab<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/fonction de d\u00e9sinstallation du module<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> uninstall<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> parent<span class=\"sy0\">::<\/span><span class=\"me2\">uninstall<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">&amp;&amp;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">uninstallSql<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">&amp;&amp;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">uninstallTab<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/cr\u00e9ation de la table dans la base de donn\u00e9es.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">protected<\/span> <span class=\"kw2\">function<\/span> installSql<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$sqlCreate<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;CREATE TABLE `&quot;<\/span> <span class=\"sy0\">.<\/span> _DB_PREFIX_ <span class=\"sy0\">.<\/span> ModuleTestTableTest<span class=\"sy0\">::<\/span><span class=\"re0\">$definition<\/span><span class=\"br0\">&#91;<\/span><span class=\"st0\">&quot;table&quot;<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">.<\/span> <span class=\"st0\">&quot;` (<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; `&quot;<\/span> <span class=\"sy0\">.<\/span> ModuleTestTableTest<span class=\"sy0\">::<\/span><span class=\"re0\">$definition<\/span><span class=\"br0\">&#91;<\/span><span class=\"st0\">&quot;primary&quot;<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">.<\/span> <span class=\"st0\">&quot;` int(11) unsigned NOT NULL AUTO_INCREMENT,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; `champ_varchar_test` varchar(255) DEFAULT NULL,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; `champ_date_test` DATETIME NOT NULL,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; `champ_int_test` int(11) unsigned NOT NULL,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PRIMARY KEY (`&quot;<\/span> <span class=\"sy0\">.<\/span> ModuleTestTableTest<span class=\"sy0\">::<\/span><span class=\"re0\">$definition<\/span><span class=\"br0\">&#91;<\/span><span class=\"st0\">&quot;primary&quot;<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">.<\/span> <span class=\"st0\">&quot;`)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> Db<span class=\"sy0\">::<\/span><span class=\"me2\">getInstance<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">execute<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sqlCreate<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/suppression de la table dans la base de donn\u00e9es<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">protected<\/span> <span class=\"kw2\">function<\/span> uninstallSql<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$sql<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;DROP TABLE &quot;<\/span> <span class=\"sy0\">.<\/span> _DB_PREFIX_ <span class=\"sy0\">.<\/span> ModuleTestTableTest<span class=\"sy0\">::<\/span><span class=\"re0\">$definition<\/span><span class=\"br0\">&#91;<\/span><span class=\"st0\">&quot;table&quot;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> Db<span class=\"sy0\">::<\/span><span class=\"me2\">getInstance<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">execute<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sql<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/cr\u00e9ation de l'onglet dans le menu de l'administration<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">protected<\/span> <span class=\"kw2\">function<\/span> installTab<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">new<\/span> Tab<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">class_name<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'AdminModuleTest'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">module<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">name<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">icon<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'settings_applications'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">id_parent<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span> Tab<span class=\"sy0\">::<\/span><span class=\"me2\">getIdFromClassName<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'DEFAULT'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$languages<\/span> <span class=\"sy0\">=<\/span> Language<span class=\"sy0\">::<\/span><span class=\"me2\">getLanguages<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">foreach<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$languages<\/span> <span class=\"kw1\">as<\/span> <span class=\"re0\">$lang<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">name<\/span><span class=\"br0\">&#91;<\/span><span class=\"re0\">$lang<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'id_lang'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">displayName<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; try <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">save<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> catch <span class=\"br0\">&#40;<\/span>Exception <span class=\"re0\">$e<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">echo<\/span> <span class=\"re0\">$e<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getMessage<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/suppression de l'onglet dans le menu de l'admnistration.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">protected<\/span> <span class=\"kw2\">function<\/span> uninstallTab<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$idTab<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span> Tab<span class=\"sy0\">::<\/span><span class=\"me2\">getIdFromClassName<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'AdminModuleTest'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$idTab<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">new<\/span> Tab<span class=\"br0\">&#40;<\/span><span class=\"re0\">$idTab<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tab<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">delete<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> catch <span class=\"br0\">&#40;<\/span>Exception <span class=\"re0\">$e<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">echo<\/span> <span class=\"re0\">$e<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getMessage<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>Cr\u00e9ons maintenant le fichiers \u00ab\u00a0\/classes\/ModuleTestTableTest.php\u00a0\u00bb appel\u00e9 au d\u00e9but du fichiers pr\u00e9c\u00e9dent. Ce fichier va h\u00e9riter de \u00ab\u00a0ObjectModel\u00a0\u00bb de prestashop afin que l&rsquo;on puisse g\u00e9rer les donn\u00e9es de fa\u00e7on \u00ab\u00a0native\u00a0\u00bb par la suite. Il va simplement servir \u00e0 d\u00e9finir la table et les champs que notre module va ajouter \u00e0 la base de donn\u00e9es, et permettre ensuite de manipuler ces donn\u00e9es.<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"php codecolorer\"><span class=\"co1\">\/\/on d\u00e9finis les champs correspondant \u00e0 ceux utilis\u00e9 dans la fonction &quot;installSql&quot; du fichier &quot;moduletest.php&quot;<\/span><br \/>\n<span class=\"kw2\">class<\/span> ModuleTestTableTest <span class=\"kw2\">extends<\/span> ObjectModel <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"re0\">$id<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"re0\">$champ_varchar_test<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"re0\">$champ_date_test<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"re0\">$champ_int_test<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> static <span class=\"re0\">$definition<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'table'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'module_test'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'primary'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'id_module_test'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'multilang'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'fields'<\/span> <span class=\"sy0\">=&gt;<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'champ_varchar_test'<\/span> <span class=\"sy0\">=&gt;<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'type'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw2\">self<\/span><span class=\"sy0\">::<\/span><span class=\"me2\">TYPE_STRING<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'required'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'champ_date_test'<\/span> <span class=\"sy0\">=&gt;<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'type'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw2\">self<\/span><span class=\"sy0\">::<\/span><span class=\"me2\">TYPE_DATE<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'required'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'champ_int_test'<\/span> <span class=\"sy0\">=&gt;<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'type'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw2\">self<\/span><span class=\"sy0\">::<\/span><span class=\"me2\">TYPE_INT<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'required'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>Il nous faut maintenant cr\u00e9er le \u00ab\u00a0ModuleAdminControllerCore\u00a0\u00bb nous permettant de g\u00e9rer le donn\u00e9es du module. Il nous faut cr\u00e9er le fichier \u00ab\u00a0\/controllers\/admin\/AdminModuleTest.php\u00a0\u00bb (voir le nom indiqu\u00e9 dans les fonctions \u00ab\u00a0installTab\u00a0\u00bb et \u00ab\u00a0uninstallTab\u00a0\u00bb du fichier \u00ab\u00a0moduletest.php\u00a0\u00bb. Ce fichier h\u00e9rite de \u00ab\u00a0ModuleAdminControllerCore\u00a0\u00bb et il nous reste peu de chose \u00e0 faire pour que tout fonctionne :<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"php codecolorer\"><span class=\"co1\">\/\/on appelle ici aussi notre classe &quot;ObjectModel&quot; que l'on va utiliser.<\/span><br \/>\n<span class=\"kw1\">require_once<\/span> _PS_MODULE_DIR_ <span class=\"sy0\">.<\/span> <span class=\"st_h\">'moduletest\/classes\/ModuleTestTableTest.php'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw2\">class<\/span> AdminModuleTestController <span class=\"kw2\">extends<\/span> ModuleAdminControllerCore <span class=\"br0\">&#123;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/configuration de l'objet a utilis\u00e9 et des champ \u00e0 affich\u00e9<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> __construct<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">bootstrap<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Gestion de l'affichage en mode bootstrap<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">table<\/span> <span class=\"sy0\">=<\/span> ModuleTestTableTest<span class=\"sy0\">::<\/span><span class=\"re0\">$definition<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'table'<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Table de l'objet<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">identifier<\/span> <span class=\"sy0\">=<\/span> ModuleTestTableTest<span class=\"sy0\">::<\/span><span class=\"re0\">$definition<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'primary'<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Cl\u00e9 primaire de l'objet<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">className<\/span> <span class=\"sy0\">=<\/span> ModuleTestTableTest<span class=\"sy0\">::<\/span><span class=\"kw2\">class<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Classe de l'objet<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">lang<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Flag pour dire si utilisation de langues ou non<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span>_defaultOrderBy <span class=\"sy0\">=<\/span> ModuleTestTableTest<span class=\"sy0\">::<\/span><span class=\"re0\">$definition<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'primary'<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/Appel de la fonction parente<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; parent<span class=\"sy0\">::<\/span>__construct<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/Liste des champs de l'objet \u00e0 afficher dans la liste<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">fields_list<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'id_module_test'<\/span> <span class=\"sy0\">=&gt;<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"co1\">\/\/nom du champ sql<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'title'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">module<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'ID'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/Titre<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'align'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'center'<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ Alignement<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'class'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'fixed-width-xs'<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/classe css de l'\u00e9l\u00e9ment<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'champ_varchar_test'<\/span> <span class=\"sy0\">=&gt;<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'title'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">module<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Texte'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'align'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'left'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'champ_date_test'<\/span> <span class=\"sy0\">=&gt;<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'title'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">module<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Date'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'align'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'left'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'champ_int_test'<\/span> <span class=\"sy0\">=&gt;<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'title'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">module<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Num\u00e9ro'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'align'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'left'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/configuration du formulaire d'ajout\/edition d'une ligne de la tabler<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/utiliser l'URL de votre admin + &quot;index.php?controller=AdminPatterns&quot; pour a liste des champs disponibles<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> renderForm<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">fields_form<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'legend'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'title'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'General Information'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'input'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'type'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'text'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'label'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Texte'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'name'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'champ_varchar_test'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'required'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'type'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'datetime'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'label'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Date'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'name'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'champ_date_test'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'required'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'type'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'text'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'label'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Num\u00e9ro'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'name'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'champ_int_test'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'required'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'submit'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st_h\">'title'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">l<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Save'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> parent<span class=\"sy0\">::<\/span><span class=\"me2\">renderForm<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/permet d'ajouter le bouton de suppression pour chaque ligne<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> renderList<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">addRowAction<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'delete'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> parent<span class=\"sy0\">::<\/span><span class=\"me2\">renderList<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>Le module de type CRUD est maintenant op\u00e9rationnel, on va regarder comment am\u00e9liorer tout \u00e7a dans des articles \u00e0 venir.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article va pr\u00e9senter comment cr\u00e9er un \u00ab\u00a0module de test\u00a0\u00bb pour prestashop. L&rsquo;objectif \u00e9tant d&rsquo;avoir une base de code sur laquelle on pourra partir pour ensuite r\u00e9pondre \u00e0 des demandes plus concr\u00e8tes. Ce module va cr\u00e9er une table dans la base de donn\u00e9e et ajouter un menu dans le tableau d&rsquo;administration de prestashop. Lors du [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2,16],"tags":[],"class_list":["post-472","post","type-post","status-publish","format-standard","hentry","category-developpement","category-prestashop"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Prestashop : Les bases d&#039;un module CRUD - Pense b\u00eate d&#039;un d\u00e9veloppeur web<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Prestashop : Les bases d&#039;un module CRUD - Pense b\u00eate d&#039;un d\u00e9veloppeur web\" \/>\n<meta property=\"og:description\" content=\"Cet article va pr\u00e9senter comment cr\u00e9er un \u00ab\u00a0module de test\u00a0\u00bb pour prestashop. L&rsquo;objectif \u00e9tant d&rsquo;avoir une base de code sur laquelle on pourra partir pour ensuite r\u00e9pondre \u00e0 des demandes plus concr\u00e8tes. Ce module va cr\u00e9er une table dans la base de donn\u00e9e et ajouter un menu dans le tableau d&rsquo;administration de prestashop. Lors du [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/\" \/>\n<meta property=\"og:site_name\" content=\"Pense b\u00eate d&#039;un d\u00e9veloppeur web\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-14T14:05:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-20T10:42:30+00:00\" \/>\n<meta name=\"author\" content=\"Numa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Numa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/\"},\"author\":{\"name\":\"Numa\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e\"},\"headline\":\"Prestashop : Les bases d&rsquo;un module CRUD\",\"datePublished\":\"2019-06-14T14:05:17+00:00\",\"dateModified\":\"2019-06-20T10:42:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/\"},\"wordCount\":1008,\"commentCount\":2,\"articleSection\":[\"D\u00e9veloppement\",\"Prestashop\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/\",\"url\":\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/\",\"name\":\"Prestashop : Les bases d'un module CRUD - Pense b\u00eate d&#039;un d\u00e9veloppeur web\",\"isPartOf\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#website\"},\"datePublished\":\"2019-06-14T14:05:17+00:00\",\"dateModified\":\"2019-06-20T10:42:30+00:00\",\"author\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e\"},\"breadcrumb\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/numa-bord.com\/miniblog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Prestashop : Les bases d&rsquo;un module CRUD\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#website\",\"url\":\"https:\/\/numa-bord.com\/miniblog\/\",\"name\":\"Pense b\u00eate d&#039;un d\u00e9veloppeur web\",\"description\":\"(php, javascript, Symfony, Wordpress....)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/numa-bord.com\/miniblog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e\",\"name\":\"Numa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g\",\"caption\":\"Numa\"},\"url\":\"https:\/\/numa-bord.com\/miniblog\/author\/negonner\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Prestashop : Les bases d'un module CRUD - Pense b\u00eate d&#039;un d\u00e9veloppeur web","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/","og_locale":"fr_FR","og_type":"article","og_title":"Prestashop : Les bases d'un module CRUD - Pense b\u00eate d&#039;un d\u00e9veloppeur web","og_description":"Cet article va pr\u00e9senter comment cr\u00e9er un \u00ab\u00a0module de test\u00a0\u00bb pour prestashop. L&rsquo;objectif \u00e9tant d&rsquo;avoir une base de code sur laquelle on pourra partir pour ensuite r\u00e9pondre \u00e0 des demandes plus concr\u00e8tes. Ce module va cr\u00e9er une table dans la base de donn\u00e9e et ajouter un menu dans le tableau d&rsquo;administration de prestashop. Lors du [&hellip;]","og_url":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/","og_site_name":"Pense b\u00eate d&#039;un d\u00e9veloppeur web","article_published_time":"2019-06-14T14:05:17+00:00","article_modified_time":"2019-06-20T10:42:30+00:00","author":"Numa","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Numa","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/#article","isPartOf":{"@id":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/"},"author":{"name":"Numa","@id":"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e"},"headline":"Prestashop : Les bases d&rsquo;un module CRUD","datePublished":"2019-06-14T14:05:17+00:00","dateModified":"2019-06-20T10:42:30+00:00","mainEntityOfPage":{"@id":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/"},"wordCount":1008,"commentCount":2,"articleSection":["D\u00e9veloppement","Prestashop"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/","url":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/","name":"Prestashop : Les bases d'un module CRUD - Pense b\u00eate d&#039;un d\u00e9veloppeur web","isPartOf":{"@id":"https:\/\/numa-bord.com\/miniblog\/#website"},"datePublished":"2019-06-14T14:05:17+00:00","dateModified":"2019-06-20T10:42:30+00:00","author":{"@id":"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e"},"breadcrumb":{"@id":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/numa-bord.com\/miniblog\/prestashop-les-bases-dun-module-crud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/numa-bord.com\/miniblog\/"},{"@type":"ListItem","position":2,"name":"Prestashop : Les bases d&rsquo;un module CRUD"}]},{"@type":"WebSite","@id":"https:\/\/numa-bord.com\/miniblog\/#website","url":"https:\/\/numa-bord.com\/miniblog\/","name":"Pense b\u00eate d&#039;un d\u00e9veloppeur web","description":"(php, javascript, Symfony, Wordpress....)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/numa-bord.com\/miniblog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e","name":"Numa","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g","caption":"Numa"},"url":"https:\/\/numa-bord.com\/miniblog\/author\/negonner\/"}]}},"_links":{"self":[{"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/posts\/472","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/comments?post=472"}],"version-history":[{"count":8,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/posts\/472\/revisions"}],"predecessor-version":[{"id":482,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/posts\/472\/revisions\/482"}],"wp:attachment":[{"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/media?parent=472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/categories?post=472"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/tags?post=472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}