magic_lilou Posted June 14, 2019 Share Posted June 14, 2019 Coucou les prestanautes, Est-il possible de faire apparaitre, le Code-barres EAN-13 ou JAN, dans la liste du catalogue des produits du BO ? Car j'aimerais, voir apparaitre cette colonne quand j'ouvre mon fichier .csv de mon catalogue. Amicalement. Lilou Link to comment Share on other sites More sharing options...
magic_lilou Posted June 18, 2019 Author Share Posted June 18, 2019 Up Link to comment Share on other sites More sharing options...
lagui Posted June 20, 2019 Share Posted June 20, 2019 Bonjour, On peut modifier ou mieux overrider le controler AdminProductsController pour obtenir ce résultat. La colonne apparaît ensuite aussi dans les exports csv. Voir le post : Ajouter les code EAN13 au listing des produits Link to comment Share on other sites More sharing options...
Janett Posted June 20, 2019 Share Posted June 20, 2019 (edited) Surtout pas d'override sinon vous allez êtes embêté pour faire vos mises à jour, c'est une très mauvaise pratique. A n'utilisez que lorsqu'aucun hook n'est disponible pour y greffer un module. Vous pouvez faire un module pour ajouter autant de colonne que vous souhaitez mais il faut connaitre la version de prestashop que vous utilisez. Module pour prestashop 1.6, à mettre ici : modules/displayproductean/displayproductean.php <?php if (!defined('_PS_VERSION_')) { exit; } class DisplayProductEan extends Module { /** * @var array list of hooks used */ public $hooks = [ 'actionAdminProductsListingFieldsModifier', 'actionAdminProductsListingResultsModifier', ]; /** * Constructor. */ public function __construct() { $this->name = 'displayproductean'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'Janett'; $this->need_instance = 0; $this->ps_versions_compliancy = [ 'min' => '1.6.1.0', 'max' => '1.6.1.99', ]; parent::__construct(); $this->displayName = $this->l('Display EAN13 on Product list'); $this->description = $this->l('Adds EAN13 on Product list'); } /** * Install Module. * * @return bool */ public function install() { return parent::install() && $this->registerHook($this->hooks); } /** * Append custom fields. * * @param array $params */ public function hookActionAdminProductsListingFieldsModifier(array $params) { // If hook is called in AdminController::processFilter() we have to check existence if (isset($params['select'])) { $params['select'] .= ', a.ean13'; } $params['fields']['ean13'] = [ 'title' => $this->l('Barcode'), 'align' => 'text-center', 'class' => 'fixed-width-xs', ]; } /** * Set additional data. * * @param array $params */ public function hookActionAdminProductsListingResultsModifier(array $params) { foreach ($params['list'] as $key => $fields) { if (isset($fields['ean13'])) { $params['list'][$key]['ean13'] = empty($fields['ean13']) ? '-' : $fields['ean13']; } } } } Pour prestashop 1.7, il faut procéder différemment. La prochaine fois, préciser votre version ! Edited June 20, 2019 by Janett (see edit history) 1 Link to comment Share on other sites More sharing options...
aramtel Posted August 13, 2020 Share Posted August 13, 2020 Le 20/06/2019 à 4:07 PM, Janett a dit : Surtout pas d'override sinon vous allez êtes embêté pour faire vos mises à jour, c'est une très mauvaise pratique. A n'utilisez que lorsqu'aucun hook n'est disponible pour y greffer un module. Vous pouvez faire un module pour ajouter autant de colonne que vous souhaitez mais il faut connaitre la version de prestashop que vous utilisez. Module pour prestashop 1.6, à mettre ici : modules/displayproductean/displayproductean.php <?php if (!defined('_PS_VERSION_')) { exit; } class DisplayProductEan extends Module { /** * @var array list of hooks used */ public $hooks = [ 'actionAdminProductsListingFieldsModifier', 'actionAdminProductsListingResultsModifier', ]; /** * Constructor. */ public function __construct() { $this->name = 'displayproductean'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'Janett'; $this->need_instance = 0; $this->ps_versions_compliancy = [ 'min' => '1.6.1.0', 'max' => '1.6.1.99', ]; parent::__construct(); $this->displayName = $this->l('Display EAN13 on Product list'); $this->description = $this->l('Adds EAN13 on Product list'); } /** * Install Module. * * @return bool */ public function install() { return parent::install() && $this->registerHook($this->hooks); } /** * Append custom fields. * * @param array $params */ public function hookActionAdminProductsListingFieldsModifier(array $params) { // If hook is called in AdminController::processFilter() we have to check existence if (isset($params['select'])) { $params['select'] .= ', a.ean13'; } $params['fields']['ean13'] = [ 'title' => $this->l('Barcode'), 'align' => 'text-center', 'class' => 'fixed-width-xs', ]; } /** * Set additional data. * * @param array $params */ public function hookActionAdminProductsListingResultsModifier(array $params) { foreach ($params['list'] as $key => $fields) { if (isset($fields['ean13'])) { $params['list'][$key]['ean13'] = empty($fields['ean13']) ? '-' : $fields['ean13']; } } } } Pour prestashop 1.7, il faut procéder différemment. La prochaine fois, préciser votre version ! Bonjour, cet ajout ean (et upc aussi) m’intéresse beaucoup pour ma boutique. Je suis en PS 1.7.6.5 J'ai essayer avec le générateur de module de prestashop en utilisant le Hook "Display new elements in the product form in Back Office" , mais je pense que ce n'est pas le bon Hook, je n'obtiens rien de plus... Pourriez-vous m'indiquer la marche à suivre sous PS 1.7 s'il vous plait Merci Link to comment Share on other sites More sharing options...
David Technicien Posted March 29, 2021 Share Posted March 29, 2021 Bonjour, je serai interessé également d'afficher une colonne EAN dans le BO page produit svp merci d'avance Link to comment Share on other sites More sharing options...
Janett Posted December 21, 2021 Share Posted December 21, 2021 Module pour PrestaShop 1.7 qui nécessite au minimum 3 fichiers désormais afin de surcharger les templates de la nouvelle page produit de la 1.7 modules/displayproductean/displayproductean.php <?php if (!defined('_PS_VERSION_')) { exit; } class DisplayProductEan extends Module { /** * @var array list of hooks used */ public $hooks = [ 'actionAdminProductsListingFieldsModifier', 'actionAdminProductsListingResultsModifier', ]; /** * @var bool */ private $isPrestaShop16; /** * Constructor. */ public function __construct() { $this->name = 'displayproductean'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'Janett'; $this->need_instance = 0; $this->ps_versions_compliancy = [ 'min' => '1.6.1.0', 'max' => '1.7.9.99', ]; parent::__construct(); $this->displayName = $this->l('Display EAN13 on Product list'); $this->description = $this->l('Adds EAN13 on Product list'); $this->isPrestaShop16 = (bool) version_compare(_PS_VERSION_, '1.7.0.0', '<='); } /** * Install Module. * * @return bool */ public function install() { return parent::install() && $this->registerHook($this->hooks); } /** * Append custom fields. * * @param array $params */ public function hookActionAdminProductsListingFieldsModifier(array &$params) { if ($this->isPrestaShop16) { // If hook is called in AdminController::processFilter() we have to check existence if (isset($params['select'])) { $params['select'] .= ', a.ean13'; } $params['fields']['ean13'] = [ 'title' => $this->l('Barcode'), 'align' => 'text-center', 'class' => 'fixed-width-xs', ]; } else { $params['sql_select']['ean13'] = [ 'table' => 'p', 'field' => 'ean13', 'filtering' => 'LIKE \'%%%s%%\'', ]; // There no proper way currently to add custom filters // This tricks doesn't manage pagination and empty results $ean13_filter = Tools::getValue('filter_column_name_ean13'); if (!empty($ean13_filter) && Validate::isEan13($ean13_filter)) { $params['sql_where'][] .= sprintf('p.ean13 LIKE "%%%s%%"', pSQL($ean13_filter)); } } } /** * Set additional data. * * @param array $params */ public function hookActionAdminProductsListingResultsModifier(array &$params) { if ($this->isPrestaShop16) { foreach ($params['list'] as $key => $fields) { if (isset($fields['ean13'])) { $params['list'][$key]['ean13'] = empty($fields['ean13']) ? '-' : $fields['ean13']; } } } } } modules/displayproductean/views/PrestaShop/Admin/Product/CatalogPage/Lists/products_table.html.twig {#** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License version 3.0 * that is bundled with this package in the file LICENSE.md. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/AFL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * @author PrestaShop SA and Contributors <contact@prestashop.com> * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 *#} {% extends '@!PrestaShop/Admin/Product/CatalogPage/Lists/products_table.html.twig' %} {% block product_catalog_form_table_header %} <tr class="column-headers"> <th scope="col" style="width: 2rem"></th> <th scope="col" style="width: 5rem"> {{ ps.sortable_column_header("ID"|trans({}, 'Admin.Global'), 'id_product', orderBy, sortOrder) }} </th> <th scope="col"> {{ ps.sortable_column_header("Name"|trans({}, 'Admin.Global'), 'name', orderBy, sortOrder) }} </th> <th scope="col"> {{ "Image"|trans({}, 'Admin.Global') }} </th> <th scope="col" style="width: 9%"> {{ ps.sortable_column_header("Reference"|trans({}, 'Admin.Global'), 'reference', orderBy, sortOrder) }} </th> <th scope="col"> {{ ps.sortable_column_header("Category"|trans({}, 'Admin.Catalog.Feature'), 'name_category', orderBy, sortOrder) }} </th> <th scope="col"> {{ ps.sortable_column_header("Ean 13"|trans({}, 'Admin.Global'), 'ean13', orderBy, sortOrder) }} </th> <th scope="col" class="text-center" style="width: 9%"> {{ ps.sortable_column_header("Price (tax excl.)"|trans({}, 'Admin.Catalog.Feature'), 'price', orderBy, sortOrder) }} </th> {% if 'PS_STOCK_MANAGEMENT'|configuration %} <th scope="col" class="text-center" style="width: 9%"> {{ ps.sortable_column_header("Quantity"|trans({}, 'Admin.Catalog.Feature'), 'sav_quantity', orderBy, sortOrder) }} </th> {% else %} <th></th> {% endif %} <th scope="col" class="text-center"> {{ ps.sortable_column_header("Status"|trans({}, 'Admin.Global'), 'active', orderBy, sortOrder) }} </th> {% if has_category_filter == true %} <th scope="col"> {{ ps.sortable_column_header("Position"|trans({}, 'Admin.Global'), 'position') }} </th> {% endif %} <th scope="col" class="text-right" style="width: 3rem; padding-right: 2rem"> {{ "Actions"|trans({}, 'Admin.Global') }} </th> </tr> {% endblock %} {% block product_catalog_form_table_filters %} <tr class="column-filters"> <th colspan="2"> {% include 'PrestaShopBundle:Admin/Helpers:range_inputs.html.twig' with { 'input_name': "filter_column_id_product", 'min': '0', 'max': '1000000', 'minLabel': "Min"|trans({}, 'Admin.Global'), 'maxLabel': "Max"|trans({}, 'Admin.Global'), 'value': filter_column_id_product, } %} </th> <th> <input type="text" class="form-control" placeholder="{{ "Search name"|trans({}, 'Admin.Catalog.Help') }}" name="filter_column_name" value="{{ filter_column_name }}" /> </th> <th> </th> <th> <input type="text" class="form-control" placeholder="{{ "Search ref."|trans({}, 'Admin.Catalog.Help') }}" name="filter_column_reference" value="{{ filter_column_reference }}" /> </th> <th> <input type="text" class="form-control" placeholder="{{ "Search category"|trans({}, 'Admin.Catalog.Help') }}" name="filter_column_name_category" value="{{ filter_column_name_category }}" /> </th> <th> <input type="text" class="form-control" placeholder="{{ "Search ean13"|trans({}, 'Admin.Catalog.Help') }}" name="filter_column_name_ean13" value="" /> </th> <th class="text-center"> {% include 'PrestaShopBundle:Admin/Helpers:range_inputs.html.twig' with { 'input_name': "filter_column_price", 'min': '0', 'max': '1000000', 'minLabel': "Min"|trans({}, 'Admin.Global'), 'maxLabel': "Max"|trans({}, 'Admin.Global'), 'value': filter_column_price, } %} </th> {% if 'PS_STOCK_MANAGEMENT'|configuration %} <th class="text-center"> {% include 'PrestaShopBundle:Admin/Helpers:range_inputs.html.twig' with { 'input_name': "filter_column_sav_quantity", 'min': '-1000000', 'max': '1000000', 'minLabel': "Min"|trans({}, 'Admin.Global'), 'maxLabel': "Max"|trans({}, 'Admin.Global'), 'value': filter_column_sav_quantity, } %} </th> {% else %} <th></th> {% endif %} <th id="product_filter_column_active" class="text-center"> <div class="form-select"> <select class="custom-select" name="filter_column_active"> <option value=""></option> <option value="1" {% if (filter_column_active is defined) and filter_column_active == '1' %}selected="selected"{% endif %}> Active </option> <option value="0" {% if (filter_column_active is defined) and filter_column_active == '0' %}selected="selected"{% endif %}> Inactive </option> </select> </div> </th> {% if has_category_filter == true %} <th> {% if not(activate_drag_and_drop) %} <input type="button" class="btn btn-outline-secondary" name="products_filter_position_asc" value="{{ "Reorder"|trans({}, 'Admin.Actions') }}" onclick="productOrderPrioritiesTable();"/> {% else %} <input type="button" id="bulk_edition_save_keep" class="btn" onclick="bulkProductAction(this, 'edition');" value="{{ "Save & refresh"|trans({}, 'Admin.Actions')|raw }}"/> {% endif %} </th> {% endif %} <th class="text-right" style="width: 5rem"> <button type="submit" class="btn btn-primary" name="products_filter_submit" title="{{ "Search"|trans({}, 'Admin.Actions') }}" > <i class="material-icons">search</i> {{ "Search"|trans({}, 'Admin.Actions') }} </button> <button type="reset" class="btn btn-link" name="products_filter_reset" onclick="productColumnFilterReset($(this).closest('tr.column-filters'))" title="{{ "Reset"|trans({}, 'Admin.Actions') }}" > <i class="material-icons">clear</i> {{ "Reset"|trans({}, 'Admin.Actions') }} </button> </th> </tr> {% endblock %} modules/displayproductean/views/PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig {#** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License version 3.0 * that is bundled with this package in the file LICENSE.md. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/AFL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * @author PrestaShop SA and Contributors <contact@prestashop.com> * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 *#} {% extends '@!PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig' %} {% block product_catalog_form_table_row %} <tr data-uniturl="{{ product.unit_action_url|default('#') }}" data-product-id="{{ product.id_product }}"> <td class="checkbox-column form-group"> <div class="md-checkbox md-checkbox-inline"> <label> <input type="checkbox" id="bulk_action_selected_products-{{ product.id_product }}" name="bulk_action_selected_products[]" value="{{ product.id_product }}"> <i class="md-checkbox-control"></i> </label> </div> </td> <td> <label class="form-check-label" for="bulk_action_selected_products-{{ product.id_product }}"> {{ product.id_product }} </label> </td> <td> <a href="{{ product.url|default('') }}#tab-step1">{{ product.name|default('N/A'|trans({}, 'Admin.Global')) }}</a> </td> <td> <a href="{{ product.url|default('') }}#tab-step1">{{ product.image|raw }}</a> </td> <td> {{ product.reference|default('') }} </td> <td> {{ product.name_category|default('') }} </td> <td> {{ product.ean13|default('') }} </td> <td class="text-center"> <a href="{{ product.url|default('') }}#tab-step2">{{ product.price|default('N/A'|trans({}, 'Admin.Global')) }}</a> </td> {% if 'PS_STOCK_MANAGEMENT'|configuration %} <td class="product-sav-quantity text-center" data-product-quantity-value="{{ product.sav_quantity|default('') }}"> <a href="{{ product.url|default('') }}#tab-step3"> {% if product.sav_quantity is defined and product.sav_quantity > 0 %} {{ product.sav_quantity }} {% else %} {{ product.sav_quantity|default('N/A'|trans({}, 'Admin.Global')) }} {% endif %} </a> </td> {% else %} <td></td> {% endif %} <td class="text-center"> {% if product.active|default(0) == 0 %} <a href="#" onclick="unitProductAction(this, 'activate'); return false;"> <i class="material-icons action-disabled">clear</i> </a> {% else %} <a href="#" onclick="unitProductAction(this, 'deactivate'); return false;"> <i class="material-icons action-enabled ">check</i> </a> {% endif %} </td> {% if product.position is defined %} <td {% if activate_drag_and_drop %}class="placeholder"{% endif %} style="cursor: pointer; cursor: hand;"> {% if activate_drag_and_drop %} <big><big>⇅</big></big> {% endif %} <span class="position">{{ product.position }}</span> <input type="hidden" name="mass_edit_action_sorted_products[]" value="{{ product.id_product }}"/> <input type="hidden" name="mass_edit_action_sorted_positions[]" value="{{ product.position }}"/> </td> {% endif %} <td class="text-right"> <div class="btn-group-action"> {% set buttons_action = [ { "href": product.preview_url|default('#'), "target": "_blank", "icon": "remove_red_eye", "label": "Preview"|trans({}, 'Admin.Actions') } ] %} {% set buttons_action = buttons_action|merge([ { "onclick": "unitProductAction(this, 'duplicate');", "icon": "content_copy", "label": "Duplicate"|trans({}, 'Admin.Actions') } ]) %} {% set buttons_action = buttons_action|merge([ { "onclick": "unitProductAction(this, 'delete');", "icon": "delete", "label": "Delete"|trans({}, 'Admin.Actions') } ]) %} {% include '@Product/CatalogPage/Forms/form_edit_dropdown.html.twig' with { 'button_id': "product_list_id_" ~ product.id_product ~ "_menu", 'default_item': { "href": product.url|default('#'), "icon": "mode_edit" }, 'right': true, 'items': buttons_action } %} </div> </td> </tr> {% endblock %} Link to comment Share on other sites More sharing options...
Vas69 Posted February 21, 2023 Share Posted February 21, 2023 @Janett je trouvais ta solution simple et élégante sauf que.... ça ne marche pas ! 😂 Du moins pour moi (PS 1.6.1.24, Version de PHP 5.6.40), avec cache vidé bien entendu ... Link to comment Share on other sites More sharing options...
Vas69 Posted February 23, 2023 Share Posted February 23, 2023 En fait cela le module fonctionne bien... faut juste penser à l'activer ! 😂 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