{% macro pagination(current_page, total_items, page_size, page_sizes, base_url, extra_params={}) %} {% set total_pages = ((total_items - 1) // page_size + 1) if total_items > 0 else 1 %} {% set start_item = (current_page - 1) * page_size + 1 %} {% set end_item = [current_page * page_size, total_items] | min %} {# Build query string with extra params #} {% set query_params = [] %} {% for key, value in extra_params.items() %} {% if value is not none and value != '' %} {% if value is iterable and value is not string %} {# Handle list values (e.g., person=[1,2,3] becomes person=1&person=2&person=3) #} {% if value|length > 0 %} {% for item in value %} {% set _ = query_params.append(key ~ '=' ~ item) %} {% endfor %} {% endif %} {% else %} {% set _ = query_params.append(key ~ '=' ~ value) %} {% endif %} {% endif %} {% endfor %} {% set extra_query = ('&' ~ query_params|join('&')) if query_params else '' %}
{% trans trimmed start=start_item|format_integer, end=end_item|format_integer, total=total_items|format_integer %} Showing {{ start }}–{{ end }} of {{ total }} results {% endtrans %}
{% endmacro %}