{"id":448,"date":"2013-06-05T11:37:28","date_gmt":"2013-06-05T09:37:28","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=448"},"modified":"2013-07-24T20:57:07","modified_gmt":"2013-07-24T18:57:07","slug":"prestashop-charger-un-objet-via-nimporte-quel-champ","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2013\/06\/05\/prestashop-charger-un-objet-via-nimporte-quel-champ\/","title":{"rendered":"Prestashop : Charger un objet  via n&rsquo;importe quel champ"},"content":{"rendered":"<p>Durant les derniers mois j&rsquo;ai travaill\u00e9 de mani\u00e8re r\u00e9guli\u00e8re avec la solution concurrente \u00ab\u00a0Magento\u00a0\u00bb qui permets le chargement et la r\u00e9cup\u00e9ration d&rsquo;informations sur les objets de mani\u00e8re tr\u00e8s souple via n&rsquo;importe quel champ.<br \/>\nCette fonctionnalit\u00e9 n&rsquo;est malheureusement pas disponible \u00e0 ce jour avec Prestashop, (version 1.5.4.1 \u00e0 ce jour ), mais avec le m\u00e9canisme des override, il est relativement ais\u00e9 d&rsquo;adapter cette logique.<\/p>\n<p>Mon besoin a \u00e9t\u00e9 motiv\u00e9 par la n\u00e9cessit\u00e9 d&rsquo;ajouter de nombreux champs sp\u00e9cifiques sur un site prestashop en cours de d\u00e9veloppement.<\/p>\n<p>\/!\\ Cette m\u00e9thode n\u00e9cessite au minimum php en version 5.3 pour fonctionner.<\/p>\n<p>Voici les codes \u00e0 mettre en place dans le fichier override\/classes\/ObjectModel.php<\/p>\n<pre lang=\"php\">\r\n<?php\r\n\r\nabstract class ObjectModel extends ObjectModelCore\r\n{\r\n    \r\n    \/**\r\n     * Rajout de la possibilit\u00e9 de r\u00e9cup\u00e9rer un objet par n'importe quel champ\r\n     * (Il est n\u00e9cessaire de l'instancier avant)\r\n     * \r\n     * @param string $field champ de la table \r\n     * @param string $value valeur du champ de la table\r\n     * @return int id_object : identifiant de l'objet\r\n     *\/\r\n    public static function getObjectIdByField($field = '', $value='') {\r\n       \r\n\t\t$className = get_called_class();   \r\n        return Db::getInstance()->getValue(\"SELECT \".$className::$definition['primary'].\" AS id_object FROM \"._DB_PREFIX_.$className::$definition['table'].\" WHERE `\".$field.\"` = '\".pSQL($value).\"'\");\r\n        \r\n    }\r\n    \r\n    \/**\r\n     * Instanciation d'un objet via n'importe quel champ\r\n     * \r\n     * @param string $field champ de la table \r\n     * @param string $value valeur du champ de la table\r\n     * @return object : instanciation de l'objet\r\n     *\/\r\n    public static function loadObjectByField($field = '', $value='') {\r\n        \r\n         $className = get_called_class();   \r\n         $object_id = Db::getInstance()->getValue(\"SELECT \".$className::$definition['primary'].\" AS id_object FROM \"._DB_PREFIX_.$className::$definition['table'].\" WHERE `\".$field.\"` = '\".pSQL($value).\"'\");\r\n   \r\n         if ( !$object_id)\r\n             return false;\r\n         \r\n         return new $className($object_id);\r\n         \r\n    }\r\n    \r\n}\r\n<\/pre>\n<p>Voici un exemple comparatif du chargement d&rsquo;un objet entre la m\u00e9thode standard de prestashop et notre nouvelle m\u00e9thode :<br \/>\nDans mon exemple j&rsquo;ai un nouveau champ \u00ab\u00a0client\u00a0\u00bb dans la table customer qui correspond \u00e0 un code client unique<\/p>\n<pre lang=\"php\">\r\n\/\/Ancienne m\u00e9thode\r\n $id_customer = Db::getInstance()->getValue(\"SELECT id_customer FROM \"._DB_PREFIX.\"customer WHERE client='XXXX'\");\r\n $client = new Customer($id_customer);\r\n \r\n \/\/Nouvelle m\u00e9thode\r\n $client = Customer::loadObjectByField('client', 'XXXXX');\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Durant les derniers mois j&rsquo;ai travaill\u00e9 de mani\u00e8re r\u00e9guli\u00e8re avec la solution concurrente \u00ab\u00a0Magento\u00a0\u00bb qui permets le chargement et la r\u00e9cup\u00e9ration d&rsquo;informations sur les objets de mani\u00e8re tr\u00e8s souple via n&rsquo;importe quel champ. Cette fonctionnalit\u00e9 n&rsquo;est malheureusement pas disponible \u00e0 ce jour avec Prestashop, (version 1.5.4.1 \u00e0 ce jour ), mais avec le m\u00e9canisme des [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","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,6],"tags":[238,104],"class_list":["post-448","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","category-trucs-et-astuces","tag-objectmodel","tag-prestashop"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/448","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=448"}],"version-history":[{"count":4,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/448\/revisions"}],"predecessor-version":[{"id":473,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/448\/revisions\/473"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}