{"id":1786,"date":"2018-04-24T12:34:43","date_gmt":"2018-04-24T10:34:43","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=1786"},"modified":"2018-11-22T18:08:21","modified_gmt":"2018-11-22T16:08:21","slug":"recuperer-des-informations-personnalisees-dans-le-panier","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2018\/04\/24\/recuperer-des-informations-personnalisees-dans-le-panier\/","title":{"rendered":"Prestashop 1.7 : R\u00e9cup\u00e9rer des informations personnalis\u00e9es dans le panier"},"content":{"rendered":"<p>J&rsquo;ai r\u00e9cemment fait face \u00e0 un probl\u00e8me, car je souhaitais remont\u00e9e un champ produit sp\u00e9cifique dans les informations du panier sur prestashop 1.7<br \/>\n( La modification d\u00e9crite fonctionne \u00e9galement sur prestashop 1.6.1.x )<\/p>\n<p>Apr\u00e8s analyse, il s&rsquo;av\u00e8re que les informations disponibles sont remont\u00e9es depuis la fonction <strong>getProducts<\/strong> de la classe <strong>Cart<\/strong>.<\/p>\n<p>L&rsquo;ensemble des champs remont\u00e9s sont list\u00e9 dans la requ\u00eate sql de remont\u00e9e des produits, et il n&rsquo;est pas possible de r\u00e9cup\u00e9rer nos nouveaux champs.<\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n\/\/ Build query\r\n$sql = new DbQuery();\r\n\r\n\/\/ Build SELECT\r\n$sql-&gt;select('cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, cp.`id_customization`, pl.`name`, p.`is_virtual`,\r\npl.`description_short`, pl.`available_now`, pl.`available_later`, product_shop.`id_category_default`, p.`id_supplier`,\r\np.`id_manufacturer`, m.`name` AS manufacturer_name, product_shop.`on_sale`, product_shop.`ecotax`, product_shop.`additional_shipping_cost`,\r\nproduct_shop.`available_for_order`, product_shop.`show_price`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,\r\nstock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,\r\np.`available_date`, p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category,\r\nCONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0), IFNULL(cp.`id_customization`, 0)) AS unique_id, cp.id_address_delivery,\r\nproduct_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference');\r\n\r\n\/\/ Build FROM\r\n$sql-&gt;from('cart_product', 'cp');\r\n\r\n...\r\n<\/pre>\n<p>Vous pouvez consulter le fichier complet ici : <a href=\"https:\/\/github.com\/PrestaShop\/PrestaShop\/blob\/1.7.3.x\/classes\/Cart.php#605\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/PrestaShop\/PrestaShop\/blob\/1.7.3.x\/classes\/Cart.php#605<\/a><\/p>\n<p>La bonne nouvelle c&rsquo;est que la requ\u00eate est effectu\u00e9e via un objet <strong>Dbquery<\/strong>, ce qui va nous permettre d&rsquo;interf\u00e9rer assez facilement avec la requ\u00eate.<\/p>\n<p>Pour ajouter une fonctionnalit\u00e9 de modification de cette requ\u00eate nous allons donc cr\u00e9er une surcharge de la classe <strong>Cart<\/strong> qui va reprendre la function getProducts de la classe parente et rajouter le contenu suivant :<\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n\/\/ Nouveau hook pour pouvoir modifier la requ\u00eate de r\u00e9cup\u00e9ration des produits\r\nHook::exec('actionCartGetProductsSqlQuery',['query' =&gt; &amp;$sql]);<\/pre>\n<p>juste avant l&rsquo;ex\u00e9cution de la requ\u00eate dans la ligne<\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n$result = Db::getInstance()-&gt;executeS($sql);\r\n<\/pre>\n<p>Via ce hook nouvellement cr\u00e9\u00e9 auquel l&rsquo;instance de l&rsquo;objet DqQuery est pass\u00e9 en param\u00e8tre, il est \u00e0 pr\u00e9sent possible de faire un peu pr\u00eat tout sur cette requ\u00eate.<br \/>\nLa variable \u00e9tant pass\u00e9e par r\u00e9f\u00e9rence, les modifications sur la requ\u00eate sont appliqu\u00e9es directement.<\/p>\n<p>Pour ajouter un champ il suffira donc de cr\u00e9er un module et de le greffer sur le hook <strong>actionCartGetProductsSqlQuery<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n\/**\r\n * Nouveau Hook pour modifier la requ\u00eate de s\u00e9lection des produits du panier\r\n * Cf. override du cart\r\n * @param array $params =&gt; 'query' =&gt; &amp;DbQuery\r\n *\/\r\npublic function hookActionCartGetProductsSqlQuery($params)\r\n{\r\n    $params['query']-&gt;select('p.marque');\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai r\u00e9cemment fait face \u00e0 un probl\u00e8me, car je souhaitais remont\u00e9e un champ produit sp\u00e9cifique dans les informations du panier sur prestashop 1.7 ( La modification d\u00e9crite fonctionne \u00e9galement sur prestashop 1.6.1.x ) Apr\u00e8s analyse, il s&rsquo;av\u00e8re que les informations disponibles sont remont\u00e9es depuis la fonction getProducts de la classe Cart. L&rsquo;ensemble des champs remont\u00e9s [&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":[104],"class_list":["post-1786","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-prestashop","prestashop-1-7","prestashop-1-7-7"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1786","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=1786"}],"version-history":[{"count":5,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1786\/revisions"}],"predecessor-version":[{"id":1791,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1786\/revisions\/1791"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}