Nubla2 Posted August 16, 2020 Share Posted August 16, 2020 Hola a todos; Estoy modificando el listado de productos en el backoffice para añadir un par de columnas: "Disponible para pedidos" y "Visible en" Ya he creado 2 columnas nuevas en \src\PrestaShopBundle\Resources\views\Admin\Product\CatalogPage\Lists\products_table.html.twig Ahora estoy intentando llamar a estas opciones para mostrarlas, con product.visibility y product.available_for_order, pero no consigo que funcione. Supongo porque no se llaman en el controller. Alguien ha conseguido añadir nuevas columnas en el listado de productos? Graciassssss Link to comment Share on other sites More sharing options...
Janett Posted August 20, 2020 Share Posted August 20, 2020 Here a module example : https://github.com/Matt75/displayproductmanufacturer/tree/1.7 Link to comment Share on other sites More sharing options...
Nubla2 Posted August 20, 2020 Author Share Posted August 20, 2020 7 hours ago, Janett said: Here a module example : https://github.com/Matt75/displayproductmanufacturer/tree/1.7 I can't install the example module I download it as zip but it gives me an error Link to comment Share on other sites More sharing options...
Prestafan33 Posted August 20, 2020 Share Posted August 20, 2020 (edited) Con el nuevo sistema de plantillas que usa ahora Prestashop la verdad es que resulta bastante complicado. Te intento explicar, yo he añadido una columna para mostrar el precio con descuento: Lo tienes que hacer desde un módulo. Hay que copiar el archivo que tú indicas: \src\PrestaShopBundle\Resources\views\Admin\Product\CatalogPage\Lists\products_table.html.twig en la siguiente ruta de tu módulo: views/PrestaShop/Admin/Product/CatalogPage/Lists/products_table.html.twig y luego editarlo y meter 1 hook propio para la cabecera de la columna (está al final del trozo del archivo que cito): <thead class="with-filters"> {% 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"> {{ "Image"|trans({}, 'Admin.Global') }} </th> <th scope="col"> {{ ps.sortable_column_header("Name"|trans({}, 'Admin.Global'), 'name', orderBy, sortOrder) }} </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" class="text-center" style="width: 9%"> {{ ps.sortable_column_header("Price (tax excl.)"|trans({}, 'Admin.Catalog.Feature'), 'price', orderBy, sortOrder) }} </th> <th scope="col" class="text-center" style="width: 9%"> {{ "Price (tax incl.)"|trans({}, 'Admin.Catalog.Feature') }} </th> <!-- CUSTOM FIELD --> {{ renderhook('AddFinalPriceHeader') }} Luego hay que hacer lo mismo con el archivo que añade los productos a la tabla, copiarlo en nuestro módulo como el anterior y meter otro hook para insertar el valor en el listado de productos (también va al final del trozo que pongo): views/PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig <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.image|raw }}</a> </td> <td> <a href="{{ product.url|default('') }}#tab-step1">{{ product.name|default('N/A'|trans({}, 'Admin.Global')) }}</a> </td> <td> {{ product.reference|default('') }} </td> <td> {{ product.name_category|default('') }} </td> <td class="text-center"> <a href="{{ product.url|default('') }}#tab-step2">{{ product.price|default('N/A'|trans({}, 'Admin.Global')) }}</a> </td> <td class="text-center"> <a href="{{ product.url|default('') }}#tab-step2">{{ product.price_final|default('N/A'|trans({}, 'Admin.Global')) }}</a> </td> <!-- CUSTOM FIELD --> {{ renderhook('AddFinalPriceValues', { 'product': product }) }} Y finalmente dentro del módulo registrar los hooks y crear los métodos para añadir el contenido: public function install() { if ( !parent::install() || !$this->registerHook('AddFinalPriceValues') || !$this->registerHook('AddFinalPriceHeader') ) { return false; } return true; } public function hookAddFinalPriceHeader($params) { return $this->display(__FILE__,'views/templates/hook/AddFinalPriceHeader.tpl'); } public function hookAddFinalPriceValues($params) { /* Aquí hago los cálculos necesarios para sacar el precio final ($final_price) */ $params['product']['price_final_with_discounts'] = Context::getContext()->currentLocale->formatPrice($final_price, 'EUR');; $this->context->smarty->assign('product',$params['product']); return $this->display(__FILE__,'views/templates/hook/AddFinalPriceValues.tpl'); } Finalmente se crean las vistas: views/templates/hook/AddFinalPriceHeader.tpl: <th class="text-center">{l s='Precio (desc. incl.)' mod='adminlistmod'}</th> views/templates/hook/AddFinalPriceValues.tpl: <td class="text-center"> {$product.price_final_with_discounts} </td> Y eso es todo. Lo he simplificado bastante, y he quitado lo que no es pertinente en este caso (por ejemplo, el cálculo del precio con descuento, o el añadir un campo para poder filtrar por el contenido de la columna, como tienen otras). Aún así, es bastante lioso, si tienes alguna duda concreta pregunta. En el caso del header de la tabla en realidad no sería necesario insertar el hook, se podría meter directamente el contenido de la vista dentro del archivo "products_table.html.twig", pero con el hook resulta más versátil y más fácil de cambiar por si se quiere modificar algo luego o añadir más columnas. También puedes prescindir incluso de las 2 vistas del final y enviar directamente el contenido desde el módulo, en los métodos de los hooks, con un simple "echo", pero eso ya a gusto del programador. Edited August 20, 2020 by Prestafan33 (see edit history) 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