Zencart tiene la opción de realizar un paginado cuando muestra la lista de productos pero a veces es necesario además un link que muestre todos los productos de una categoría y no usando paginación.

Una opción simple sería aumentar el número máximo de producto para mostrar: configuration/maximun values/Products Listing- Number Per Page

Pero si quisieramos mantener ambas opciones funcionando mediante un link «view all» debemos modificar en nuestro template el archivo templates/tpl_modules_product_listing.php

Buscamos las líneas:

1
2
<?php if ( ($listing_split->number_of_rows > 0) && ( (PREV_NEXT_BAR_LOCATION == '1') || (PREV_NEXT_BAR_LOCATION == '3') ) ) {
?>

Y vamos a reemplazarlas por:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php if ( ($listing_split->number_of_rows > 0) && ( (PREV_NEXT_BAR_LOCATION == '1') || (PREV_NEXT_BAR_LOCATION == '3') ) ) {
?>

<div>
<?php
  if ($_GET['override'] == 'more') {
    // Si estamos mostrando todo ponemos un link "Paginate"
    echo ($listing_split->number_of_rows > MAX_DISPLAY_PRODUCTS_LISTING ? '<a href="' . zen_href_link(FILENAME_DEFAULT, 'cPath=' . $_GET['cPath']) . '">' . 'Paginate Products' . '</a>' : '');
    $max_display_products_listing_override = $db->Execute($listing_sql);
      $max_display_products_listing_override = $max_display_products_listing_override->RecordCount();
      $listing_split = new splitPageResults($listing_sql, $max_display_products_listing_override, 'p.products_id', 'page');
  } else {
    // Si estamos paginando mostramos el link "View All"
    echo ($listing_split->number_of_rows > MAX_DISPLAY_PRODUCTS_LISTING ? '<a href="' . zen_href_link(FILENAME_DEFAULT, 'cPath=' . $_GET['cPath'] . '&override=more') . '">' . 'View All' . '</a>' : '');
  }
?>
</div>

<div id="productsListingTopNumber" class="navSplitPagesResult back"><?php echo $listing_split->display_count(TEXT_DISPLAY_NUMBER_OF_PRODUCTS); ?></div>
<div id="productsListingListingTopLinks" class="navSplitPagesLinks forward"><?php echo TEXT_RESULT_PAGE . ' ' . $listing_split->display_links(MAX_DISPLAY_PAGE_LINKS, zen_get_all_get_params(array('page', 'info', 'x', 'y', 'main_page'))); ?></div>
<br class="clearBoth" />
<?php
}
?>

Hay un detalle más que tal vez debamos cambiar según nuestra versión de Zencart en el archivo de nuestro template modules/tpl_tabular_display.php
Probablemente en la línea 17, buscamos:

1
$listing_split = new splitPageResults($listing_sql, MAX_DISPLAY_PRODUCTS_LISTING, 'p.products_id', 'page');

Simplemente borramos o dejamos comentada dicha línea

Observaciones

  • Si no encuentras dichos archivos en tu template debes copiarlos de la carpeta template_default
  • No olvides realizar un backup antes de hacer cualquier cambio
  • Si te aparece algun error tipo unexpected Var…. eso significa que te haz comido alguna llave o punto y coma