{% sw_extends '@Storefront/storefront/component/product/listing.html.twig' %}
{% set currentPage = ((searchResult.criteria.offset + 1) / searchResult.criteria.limit )|round(0, 'ceil') %}
{% set paginationConfig = { page: currentPage }|json_encode %}
{% set productsPerPage = config('core.listing.productsPerPage') %}
{% set visibleProducts = searchResult.limit > searchResult.total ? searchResult.total : searchResult.limit %}
{% set loadMoreConfig = {
limit: searchResult.limit,
total: searchResult.total,
productsPerPage: productsPerPage
} %}
{% if disableEmptyFilter is not defined %}
{% set disableEmptyFilter = config('core.listing.disableEmptyFilterOptions') %}
{% endif %}
{% set listingPagination = {
sidebar: sidebar,
params: params,
dataUrl: dataUrl,
filterUrl: filterUrl,
disableEmptyFilter: disableEmptyFilter,
snippets: {
resetAllButtonText: 'listing.filterPanelResetAll'|trans|sw_sanitize
}
} %}
{% block product_listing %}
{% block element_product_listing_pagination_nav_actions %}
<div class="cms-element-product-listing-actions">
<div class="sorting-and-filter">
{% block element_product_listing_sorting %}
{% sw_include '@Storefront/storefront/component/sorting.html.twig' with {
current: searchResult.sorting,
sortings: searchResult.availableSortings
} %}
{% endblock %}
</div>
<div class="active-filters">
<div class="filter-panel-active-title">
{{ 'wyn-theme.listing.filterActiveTitle'|trans|sw_sanitize }}
</div>
<div class="filter-panel-active-container"></div>
</div>
</div>
{% endblock %}
<div
class="cms-element-product-listing-wrapper"
data-listing-load-more="true"
data-listing-load-more-options='{{ loadMoreConfig|json_encode }}'
data-listing="true"
data-listing-options='{{ listingPagination|json_encode }}'
>
{% block element_product_listing_wrapper_content %}
<div class="cms-element-product-listing">
{% block element_product_listing_row %}
<div class="row cms-listing-row js-listing-wrapper {% if searchResult.total == 0 %}cms-listing-row--empty{% endif %}">
{% if searchResult.total > 0 %}
{% block element_product_listing_col %}
{% for product in searchResult %}
{# In Shopware's default, classes {{ listingColumns }} are inserted here,
which differ when a sidebar is shown (and may differ for product overview / wishlist /
search results). For more flexibility we use a grid layout here. #}
<div class="cms-listing-col">
{% block element_product_listing_box %}
{% sw_include '@Storefront/storefront/component/product/card/box.html.twig' with {
'layout': boxLayout,
'displayMode': displayMode
} %}
{% endblock %}
</div>
{% endfor %}
{% endblock %}
{% else %}
{% block element_product_listing_col_empty %}
<div class="cms-listing-col col-12">
{% block element_product_listing_col_empty_alert %}
{% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
type: 'info',
content: 'listing.emptyResultMessage'|trans|sw_sanitize
} %}
{% endblock %}
</div>
{% endblock %}
{% endif %}
</div>
{% endblock %}
{% if searchResult.total > searchResult.limit %}
<div class="visible-products-progress">
<div class="progress">
<div
class="progress-bar" role="progressbar"
style="width: {{ 100 * (visibleProducts / searchResult.total) }}%"
aria-valuenow="{{ visibleProducts }}"
aria-valuemin="{{ productsPerPage }}"
aria-valuemax="{{ searchResult.total }}"
>
</div>
</div>
<div class="progress-info">
{{ 'wyn-theme.listing.visibleProductsInfo'|trans|replace({
'%current%': visibleProducts,
'%total%': searchResult.total,
}) }}
</div>
<wyn-button variant="secondary" class="progress-load-more-button js-load-more">
{{ 'wyn-theme.listing.loadMoreProducts'|trans|sw_sanitize }}
</wyn-button>
</div>
{% endif %}
</div>
{% endblock %}
</div>
{% endblock %}