El theme Base cuenta con una paginación híbrida entre infinite-scroll y botón para ver más productos, pero en este tutorial vamos a agregar la clásica paginación con números y navegación entre diferentes páginas.
HTML
1. Lo primero que vamos a hacer es crear las carpeta grid dentro de la carpeta snipplets, y luego agregar el snipplet pagination.tpl con el siguiente código:
{% if pages.numbers %} {% if pages.previous %} <a href="{{ pages.previous }}" class="pagination-arrow-link m-right-half"> <span class="pagination-arrow-prev m-top-half p-top-quarter"> {% include "snipplets/svg/chevron-left.tpl" with {svg_custom_class: "icon-inline icon-w-16 svg-icon-text mr-2"} %} </span> </a> {% endif %} {% for page in pages.numbers %} {% if page.selected %} <div class="js-page-link-{{ page.number }} pagination-input-container d-inline-block {% if not pages.previous %}pagination-input-container-wide{% endif %}"> <span> {{ 'Página' | t }} </span> <input type="number" value="{{ page.number }}" class="js-mobile-paginator-input font-body pagination-input text-center"/> <span> {{ 'de ' | t }} {{ pages.amount }} </span> </div> {% else %} <a href="{{ page.url }}" class="js-page-link-{{ page.number }} hidden p-all-quarter">{{ page.number }}</a> {% endif %} {% endfor %} {% if pages.next %} <a href="{{ pages.next }}" class="pagination-arrow-link m-left-half"> <span class="pagination-arrow-next m-top-half p-top-quarter"> {% include "snipplets/svg/chevron-right.tpl" with {svg_custom_class: "icon-inline icon-w-16 svg-icon-text ml-2"} %} </span> </a> {% endif %} {% endif %}
2. Luego vamos al archivo template/category.tpl y buscamos el código que genera el paginado híbrido que tiene el theme base, que es el siguiente:
{% if pages.current == 1 and not pages.is_last %} <div class="text-center mt-5 mb-5"> <a class="js-load-more btn btn-primary"> <span class="js-load-more-spinner" style="display:none;">{% include "snipplets/svg/sync-alt.tpl" with {svg_custom_class: "icon-inline icon-spin"} %}</span> {{ 'Mostrar más productos' | t }} </a> </div> <div id="js-infinite-scroll-spinner" class="mt-5 mb-5 text-center w-100" style="display:none"> {% include "snipplets/svg/sync-alt.tpl" with {svg_custom_class: "icon-inline icon-3x svg-icon-text icon-spin"} %} </div> {% endif %}
Y lo reemplazamos por esto:
{% if not settings.classic_pagination %} {% if pages.current == 1 and not pages.is_last %} <div class="text-center mt-5 mb-5"> <a class="js-load-more btn btn-primary"> <span class="js-load-more-spinner" style="display:none;">{% include "snipplets/svg/sync-alt.tpl" with {svg_custom_class: "icon-inline icon-spin"} %}</span> {{ 'Mostrar más productos' | t }} </a> </div> <div id="js-infinite-scroll-spinner" class="mt-5 mb-5 text-center w-100" style="display:none"> {% include "snipplets/svg/sync-alt.tpl" with {svg_custom_class: "icon-inline icon-3x svg-icon-text icon-spin"} %} </div> {% endif %} {% else %} <div class="js-pagination-container clear-both p-top p-bottom text-center"> <div class='pagination'> {% snipplet "grid/pagination.tpl" %} </div> </div> {% endif %}
3. Repetimos el paso 2 pero en el archivo template/search.tpl
4. Si querés cambiar la cantidad de productos que se muestran por página, podes editarlo desde el siguiente código que se encuentra arriba tanto en template/category.tpl como en template/search.tpl, modificando el número en:
{% paginate by 12 %}
5. Para terminar con el HTML, vamos a agregar una carpeta SVG dentro de la carpeta snipplets, donde vamos a crear el snipplet para los íconos:
chevron-right.tpl
<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><path d="M24.707 38.101L4.908 57.899c-4.686 4.686-4.686 12.284 0 16.971L185.607 256 4.908 437.13c-4.686 4.686-4.686 12.284 0 16.971L24.707 473.9c4.686 4.686 12.284 4.686 16.971 0l209.414-209.414c4.686-4.686 4.686-12.284 0-16.971L41.678 38.101c-4.687-4.687-12.285-4.687-16.971 0z"/></svg>
chevron-left.tpl
<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><path d="M231.293 473.899l19.799-19.799c4.686-4.686 4.686-12.284 0-16.971L70.393 256 251.092 74.87c4.686-4.686 4.686-12.284 0-16.971L231.293 38.1c-4.686-4.686-12.284-4.686-16.971 0L4.908 247.515c-4.686 4.686-4.686 12.284 0 16.971L214.322 473.9c4.687 4.686 12.285 4.686 16.971-.001z"/></svg>
CSS
Agregamos al diseño las clases helpers. Podés seguir este este pequeño tutorial para hacerlo (simplemente es copiar y pegar algunas clases, no toma más de 1 minuto).
Configuraciones
En el archivo config/settings.txt vamos a agregar el checkbox para poder activar o desactivar el paginado clásico. Lo vamos a incluír dentro de la sección “Listado de productos”.
title title = Paginado checkbox name = classic_pagination description = Usar el paginado clásico
Traducciones
En este paso agregamos los textos para las traducciones en el archivo config/translations.txt
es "Página" pt "Página" en "Page" es_mx "Página" es "Paginado" pt "Paginação" en "Pagination" es_mx "Paginado" es "Paginado clásico" pt "Paginação clássica" en "Classic pagination" es_mx "Paginado clásico" es "Usar el paginado clásico" pt "Use paginação clássica" en "Use classic paging" es_mx "Usar el paginado clásico"
Activación
Por último podés activar paginado clásico desde el Administrador nube, en la sección de Personalizar tu diseño actual dentro de “Listado de productos”: