{"id":1796,"date":"2018-06-25T13:43:46","date_gmt":"2018-06-25T11:43:46","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=1796"},"modified":"2018-12-10T11:26:24","modified_gmt":"2018-12-10T09:26:24","slug":"prestashop-ajouter-un-objet-dans-lapi","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2018\/06\/25\/prestashop-ajouter-un-objet-dans-lapi\/","title":{"rendered":"Prestashop : Ajouter un objet dans l&rsquo;api"},"content":{"rendered":"<p>Nous allons voir comment ajouter un nouvel objet personnalis\u00e9 dans l&rsquo;api Prestashop via un module.<br \/>\nCette m\u00e9thodologie fonctionne sous Prestashop 1.7<\/p>\n<p>L&rsquo;objectif est d&rsquo;ajouter de rendre un nouvel objet \u00ab\u00a0Sample\u00a0\u00bb qui pourra \u00eatre manipul\u00e9 via l&rsquo;api.<br \/>\nPour cela nous allons cr\u00e9er un module <strong>hhapisample <\/strong><\/p>\n<p>Ce module va ajouter une entit\u00e9 \u00ab\u00a0sample\u00a0\u00bb qui sera g\u00e9rable via l&rsquo;API.<\/p>\n<p>Cette entit\u00e9 aura uniquement les param\u00e8tres suivants :<\/p>\n<ul>\n<li>r\u00e9f\u00e9rence<\/li>\n<li>nom ( multilingue )<\/li>\n<li>description ( multilingue )<\/li>\n<\/ul>\n<p>Voici le code de cette entit\u00e9 \u00e0 placer dans le fichier <em>classes\/Sample.php<\/em> du module.<\/p>\n<pre lang=\"php\" escaped=\"true\">\/**\r\n * Classe d'exemple pour le webservice\r\n *\/\r\nclass Sample extends ObjectModel {\r\n   \r\n    \/** @var string R\u00e9f\u00e9rence du document *\/\r\n    public $reference;\r\n    \r\n    \/** @var string nom *\/\r\n    public $name;\r\n\r\n    \/** @var string description *\/\r\n    public $description;\r\n\r\n    \/**\r\n     * D\u00e9finition des param\u00e8tres de la classe\r\n     *\/\r\n    public static $definition = array(\r\n        'table' =&gt; 'sample',\r\n        'primary' =&gt; 'id_sample',\r\n        'multilang' =&gt; true,\r\n        'multilang_shop' =&gt; false,\r\n        'fields' =&gt; array(\r\n            'reference' =&gt; array('type' =&gt; self::TYPE_STRING, 'validate' =&gt; 'isCleanHtml', 'size' =&gt; 255),\r\n            'name' =&gt; array('type' =&gt; self::TYPE_STRING, 'validate' =&gt; 'isCleanHtml', 'size' =&gt; 255 , 'lang' =&gt; true),\r\n            'description' =&gt; array('type' =&gt; self::TYPE_STRING, 'validate' =&gt; 'isCleanHtml' , 'lang' =&gt; true),\r\n        ),\r\n    );\r\n\r\n    \/**\r\n     * Mapping de la classe avec le webservice\r\n     * \r\n     * @var type \r\n     *\/\r\n    protected $webserviceParameters = [\r\n        'objectsNodeName' =&gt; 'samples', \/\/objectsNodeName doit \u00eatre la valeur d\u00e9clar\u00e9e dans le hookAddWebserviceResources ( liste des entit\u00e9s )\r\n        'objectNodeName' =&gt; 'sample', \/\/ D\u00e9tail d'une entit\u00e9\r\n        'fields' =&gt; []\r\n    ];\r\n}\r\n<\/pre>\n<p>La d\u00e9finition du webservice est g\u00e9r\u00e9 dans l&rsquo;objet est configur\u00e9 dans la variable $webserviceParameters<br \/>\nPour rendre disponible cette entit\u00e9, il faut greffer votre module sur le hook addWebserviceResources<\/p>\n<pre lang=\"php\" escaped=\"true\">\/**\r\n     * Ajout de la nouvelle entit\u00e9 au webservice\r\n     * @param $params\r\n     * @return array\r\n     *\/\r\n    public function hookAddWebserviceResources($params) {\r\n        return [\r\n            'samples' =&gt; [ \/\/Nom du param\u00e8tre $webserviceParameters['objectsNodeName'] de la classe Objet\r\n                'description' =&gt; 'Sample new entity for API',\r\n                'class' =&gt; 'Sample'\r\n            ],\r\n        ];\r\n    }\r\n<\/pre>\n<p>Une fois le module install\u00e9, vous pouvez-voir dans la liste des objets de l&rsquo;api que l&rsquo;entit\u00e9 sample est bien visible.<\/p>\n<p>En vous rendant dans \u00ab\u00a0Param\u00e8tres avanc\u00e9s \/ Webservice\u00a0\u00bb<br \/>\nIl faut autoriser les utilisateurs api souhait\u00e9s \u00e0 acc\u00e9der \u00e0 l&rsquo;entit\u00e9 pour pouvoir la modifier.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1797\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/06\/api-sample.jpg\" alt=\"Api prestashop\" width=\"512\" height=\"73\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/06\/api-sample.jpg 512w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/06\/api-sample-300x43.jpg 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/p>\n<p>Lors de l&rsquo;appel \u00e0 la page de l&rsquo;api avec un utilisateur qui a les droits n\u00e9cessaire nous pourrons voir les informations suivantes :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1800\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/06\/api-sample2-1.jpg\" alt=\"Api Prestashop sample\" width=\"791\" height=\"357\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/06\/api-sample2-1.jpg 791w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/06\/api-sample2-1-300x135.jpg 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/06\/api-sample2-1-768x347.jpg 768w\" sizes=\"auto, (max-width: 791px) 100vw, 791px\" \/><\/p>\n<p>Notre nouvel objet est donc bien disponible via l&rsquo;api et il est possible de le g\u00e9r\u00e9 comme tous les autres \ud83d\ude42<\/p>\n<p>Voici le code complet du module<\/p>\n<pre lang=\"php\" escaped=\"true\">\/\/Inclusion de la classe du nouveau mod\u00e8le\r\ninclude_once dirname(__FILE__) . '\/classes\/Sample.php';\r\n\r\n\/**\r\n *\r\n * Sample module to add custom object API\r\n *\/\r\nclass HhApiSample extends Module {\r\n\r\n    public function __construct() {\r\n        $this-&gt;name = 'hhapisample';\r\n        $this-&gt;tab = 'others';\r\n        $this-&gt;version = '0.1.0';\r\n        $this-&gt;author = 'hhennes';\r\n        $this-&gt;need_instance = 0;\r\n        $this-&gt;bootstrap = true;\r\n\r\n        parent::__construct();\r\n\r\n        $this-&gt;displayName = $this-&gt;l('HH api Sample');\r\n        $this-&gt;description = $this-&gt;l('Sample module to add custom entity API');\r\n    }\r\n\r\n    \/**\r\n     * Installation du module\r\n     * @return bool\r\n     *\/\r\n    public function install() {\r\n\r\n        if (!parent::install() \r\n            || !$this-&gt;registerHook('addWebserviceResources') \r\n            || !$this-&gt;installSql()\r\n        ) {\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    \/**\r\n     * D\u00e9sinstallation du module\r\n     * @return bool\r\n     *\/\r\n    public function uninstall() {\r\n        if (!parent::uninstall() || !$this-&gt;uninstallSql()\r\n        ) {\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    \/**\r\n     * Install Sql\r\n     * @return bool\r\n     *\/\r\n    protected function installSql() {\r\n        \/\/Cr\u00e9ation de la table de l'entit\u00e9 \"Sample\"\r\n        $sql = \"CREATE TABLE `\" . _DB_PREFIX_ . \"sample` (\r\n                  `id_sample` int(11) unsigned NOT NULL AUTO_INCREMENT,\r\n                  `reference` int(11) DEFAULT NULL,\r\n                  PRIMARY KEY (`id_sample`)\r\n                ) ENGINE=InnoDB DEFAULT CHARSET=utf8;\";\r\n\r\n        \/\/Cr\u00e9ation de la table de langue de l'entit\u00e9 \"Sample\"\r\n        $sqlLang = \"CREATE TABLE `\" . _DB_PREFIX_ . \"sample_lang` (\r\n                  `id_sample` int(11) unsigned NOT NULL AUTO_INCREMENT,\r\n                  `id_lang` int(11) unsigned NOT NULL,\r\n                  `name` varchar(255) DEFAULT NULL,\r\n                  `description` TEXT DEFAULT NULL,\r\n                  PRIMARY KEY (`id_sample`,`id_lang`)\r\n                ) ENGINE=InnoDB DEFAULT CHARSET=utf8;\";\r\n\r\n        return Db::getInstance()-&gt;execute($sql) &amp;&amp; Db::getInstance()-&gt;execute($sqlLang);\r\n    }\r\n\r\n    \/**\r\n     * Uninstall Sql\r\n     * @return bool\r\n     *\/\r\n    protected function unInstallSql() {\r\n        $sql = \"DROP TABLE IF EXISTS \" . _DB_PREFIX_ . \"sample;\"\r\n                . \"DROP TABLE IF EXISTS \" . _DB_PREFIX_ . \"sample_lang;\";\r\n        return Db::getInstance()-&gt;execute($sql);\r\n    }\r\n\r\n    \/**\r\n     * Ajout de la nouvelle entit\u00e9 au webservice\r\n     * @Todo V\u00e9rifier les versions compatibles\r\n     * @param $params\r\n     * @return array\r\n     *\/\r\n    public function hookAddWebserviceResources($params) {\r\n        return [\r\n            'samples' =&gt; [\r\n                'description' =&gt; 'Sample new entity for API',\r\n                'class' =&gt; 'Sample'\r\n            ],\r\n        ];\r\n    }\r\n\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Nous allons voir comment ajouter un nouvel objet personnalis\u00e9 dans l&rsquo;api Prestashop via un module. Cette m\u00e9thodologie fonctionne sous Prestashop 1.7 L&rsquo;objectif est d&rsquo;ajouter de rendre un nouvel objet \u00ab\u00a0Sample\u00a0\u00bb qui pourra \u00eatre manipul\u00e9 via l&rsquo;api. Pour cela nous allons cr\u00e9er un module hhapisample Ce module va ajouter une entit\u00e9 \u00ab\u00a0sample\u00a0\u00bb qui sera g\u00e9rable via [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[245],"tags":[516,521,104],"class_list":["post-1796","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-api","tag-custom","tag-prestashop","prestashop-1-6","prestashop-1-7","prestashop-1-7-2","prestashop-1-7-4","prestashop-1-7-7","prestashop-1-7-8","prestashop-8-0"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=1796"}],"version-history":[{"count":5,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1796\/revisions"}],"predecessor-version":[{"id":1887,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1796\/revisions\/1887"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}