Paginação clássica

O tema Base tem uma página híbrida entre o scroll infinito e o botão para ver mais produtos, mas neste tutorial vamos adicionar a páginação clássica com números e navegação entre diferentes páginas.


HTML

1. A primeira coisa que vamos fazer é criar a pasta grid dentro da pasta snipplets e em seguida, adicionar o pagination.tpl snipplet com o seguinte 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. Em seguida, vamos para o arquivo template/category.tpl e procuramos o código que gera a paginação híbrida que possui o layout Base:

{% 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 %}

E o substituímos por:

{% 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. Repita o passo 2, mas no arquivo template/search.tpl

4. Se você quiser alterar o número de produtos mostrados por página, você pode editá-lo a partir do seguinte código encontrado no template/category.tpl e no template/search.tpl, modificando o número em:

{% paginate by 12 %}

5. Para finalizar com o HTML, vamos adicionar uma pasta SVG dentro da pasta snipplets, onde vamos criar o snipplet para os ícones:

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

 Adicionamos helper classes ao layout. Você pode seguir este pequeno tutorial para fazer isso (é só copiar e colar algumas classes, leva menos de 1 minuto).

Configurações

No arquivo config/settings.txt, adicionaremos o checkbox para ativar ou desativar a paginação clássica. Vamos incluí-lo na seção "Lista de produtos".

    title
        title = Paginado
    checkbox
        name = classic_pagination
        description = Usar el paginado clásico

Traduções

Nesta etapa, adicionamos os textos para as traduções no arquivo 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"

Ativação

Finalmente, você pode ativar a paginação clássica do Administrador Nuvem, na seção ‘Personalizar seu layout atual’ em “Lista de produtos”: