nicola10 Posted March 6, 2017 Share Posted March 6, 2017 Hello Is It possible to set the number of products per page in invoice? Link to comment Share on other sites More sharing options...
rocky Posted March 7, 2017 Share Posted March 7, 2017 No, PrestaShop doesn't have this option. You'd have to override pdf/invoice.product-tab.tpl and implement it yourself. Link to comment Share on other sites More sharing options...
nicola10 Posted March 7, 2017 Author Share Posted March 7, 2017 Thank you for reply rocky In pdf/invoice.product-tab.tpl I found: <!-- PRODUCTS --> {foreach $order_details as $order_detail} {cycle values=["color_line_even", "color_line_odd"] assign=bgcolor_class} But I don't know how to implement the "page break" if the number of items in invoice is greater than 7 Link to comment Share on other sites More sharing options...
rocky Posted March 7, 2017 Share Posted March 7, 2017 I'm not sure exactly how to create page breaks. You can try the following to see if it works: <!-- PRODUCTS --> {foreach from=$order_details item='order_detail' name='order_details'} {cycle values=["color_line_even", "color_line_odd"] assign=bgcolor_class} {if $smarty.foreach.order_details.iteration % 7 == 6} <br pagebreak="true" /> {/if} Link to comment Share on other sites More sharing options...
nicola10 Posted March 8, 2017 Author Share Posted March 8, 2017 Thank you rocky! I tried your code and I opened a pdf of an invoice with 13 items and the invoice was divided into 3 pages: First page: 5 items and the ? symbol after the last item Second page: 7 items and the ? symbol after the last item and in the same row of the first item Third page: 1 item with the ? symbol in the same row of the first item So I tried to modify From {if $smarty.foreach.order_details.iteration % 7 == 6} To {if $smarty.foreach.order_details.index % 7 == 6} I opened the same pdf and the invoice was divided into 2 pages: First page: 6 items and the ? symbol after the last item Second page: 7 item with the ? symbol in the same row of the first item Why it shows the symbol "?" ? Is It correct to use index instead iteration? Link to comment Share on other sites More sharing options...
rocky Posted March 9, 2017 Share Posted March 9, 2017 Try the following: {* * 2007-2016 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * 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. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2016 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} <!-- PRODUCTS --> {foreach from=$order_details item='order_detail' name='order_details'} {if $smarty.foreach.order_details.index % 7 == 0} {if !$smarty.foreach.order_details.first}<br pagebreak="true" />{/if} <table class="product" width="100%" cellpadding="4" cellspacing="0"> <thead> <tr> <th class="product header small" width="{$layout.reference.width}%">{l s='Reference' pdf='true'}</th> <th class="product header small" width="{$layout.product.width}%">{l s='Product' pdf='true'}</th> <th class="product header small" width="{$layout.tax_code.width}%">{l s='Tax Rate' pdf='true'}</th> {if isset($layout.before_discount)} <th class="product header small" width="{$layout.unit_price_tax_excl.width}%">{l s='Base price' pdf='true'} <br /> {l s='(Tax excl.)' pdf='true'}</th> {/if} <th class="product header-right small" width="{$layout.unit_price_tax_excl.width}%">{l s='Unit Price' pdf='true'} <br /> {l s='(Tax excl.)' pdf='true'}</th> <th class="product header small" width="{$layout.quantity.width}%">{l s='Qty' pdf='true'}</th> <th class="product header-right small" width="{$layout.total_tax_excl.width}%">{l s='Total' pdf='true'} <br /> {l s='(Tax excl.)' pdf='true'}</th> </tr> </thead> <tbody> {/if} {cycle values=["color_line_even", "color_line_odd"] assign=bgcolor_class} <tr class="product {$bgcolor_class}"> <td class="product center"> {$order_detail.product_reference} </td> <td class="product left"> {if $display_product_images} <table width="100%"> <tr> <td width="15%"> {if isset($order_detail.image) && $order_detail.image->id} {$order_detail.image_tag} {/if} </td> <td width="5%"> </td> <td width="80%"> {$order_detail.product_name} </td> </tr> </table> {else} {$order_detail.product_name} {/if} </td> <td class="product center"> {$order_detail.order_detail_tax_label} </td> {if isset($layout.before_discount)} <td class="product center"> {if isset($order_detail.unit_price_tax_excl_before_specific_price)} {displayPrice currency=$order->id_currency price=$order_detail.unit_price_tax_excl_before_specific_price} {else} -- {/if} </td> {/if} <td class="product right"> {displayPrice currency=$order->id_currency price=$order_detail.unit_price_tax_excl_including_ecotax} {if $order_detail.ecotax_tax_excl > 0} <br> <small>[spam-filter]displayPrice currency=$order->id_currency price=$order_detail.ecotax_tax_excl}|string_format:{l s='ecotax: %s' pdf='true'[spam-filter]</small> {/if} </td> <td class="product center"> {$order_detail.product_quantity} </td> <td class="product right"> {displayPrice currency=$order->id_currency price=$order_detail.total_price_tax_excl_including_ecotax} </td> </tr> {foreach $order_detail.customizedDatas as $customizationPerAddress} {foreach $customizationPerAddress as $customizationId => $customization} <tr class="customization_data {$bgcolor_class}"> <td class="center"> </td> <td> {if isset($customization.datas[$smarty.const._CUSTOMIZE_TEXTFIELD_]) && count($customization.datas[$smarty.const._CUSTOMIZE_TEXTFIELD_]) > 0} <table style="width: 100%;"> {foreach $customization.datas[$smarty.const._CUSTOMIZE_TEXTFIELD_] as $customization_infos} <tr> <td style="width: 30%;"> {$customization_infos.name|string_format:{l s='%s:' pdf='true'[spam-filter] </td> <td>{$customization_infos.value}</td> </tr> {/foreach} </table> {/if} {if isset($customization.datas[$smarty.const._CUSTOMIZE_FILE_]) && count($customization.datas[$smarty.const._CUSTOMIZE_FILE_]) > 0} <table style="width: 100%;"> <tr> <td style="width: 70%;">{l s='image(s):' pdf='true'}</td> <td>{count($customization.datas[$smarty.const._CUSTOMIZE_FILE_])}</td> </tr> </table> {/if} </td> <td class="center"> ({if $customization.quantity == 0}1{else}{$customization.quantity}{/if}) </td> {assign var=end value=($layout._colCount-3)} {for $var=0 to $end} <td class="center"> -- </td> {/for} </tr> <!--if !$smarty.foreach.custo_foreach.last--> {/foreach} {/foreach} {if !$smarty.foreach.order_details.last && $smarty.foreach.order_details.index % 7 == 6} </tbody> </table> {/if} {/foreach} <!-- END PRODUCTS --> <!-- CART RULES --> {assign var="shipping_discount_tax_incl" value="0"} {foreach from=$cart_rules item=cart_rule name="cart_rules_loop"} {if $smarty.foreach.cart_rules_loop.first} <tr class="discount"> <th class="header" colspan="{$layout._colCount}"> {l s='Discounts' pdf='true'} </th> </tr> {/if} <tr class="discount"> <td class="white right" colspan="{$layout._colCount - 1}"> {$cart_rule.name} </td> <td class="right white"> - {displayPrice currency=$order->id_currency price=$cart_rule.value_tax_excl} </td> </tr> {/foreach} </tbody> </table> Link to comment Share on other sites More sharing options...
nicola10 Posted March 9, 2017 Author Share Posted March 9, 2017 It works perfectly! Thank you very much rocky! SOLVED Link to comment Share on other sites More sharing options...
LuiMai91 Posted February 27, 2020 Share Posted February 27, 2020 Hi, there is a solution for prestashop 1.7.6.1? i received error 500 when a modify file with your code! Thank you so much! 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