{% extends 'base.html.twig' %} {% block title %}Coutellerie artisanale — couteaux faits main à Clermont-Ferrand{% endblock %} {% block metaDesc %}La coutellerie artisanale Vulcan' Affûtage : couteaux faits main, tire-bouchons et créations uniques de l'atelier de Clermont-Ferrand. Pièces d'artisan, livraison partout en France.{% endblock %} {# Chaque page du listing est sa propre URL canonique : renvoyer les pages 2..N vers la page 1 revenait à demander à Google de ne pas les indexer. #} {% block canonical %}{{ canonicalPath }}{% endblock %} {% block headerProduit %}gColor{% endblock %} {% block stylesheets %} {% endblock %} {% block body %}
{# ============================ HERO ============================ #}
La boutique · Pièces uniques

{% if filtreLabel %}{{ filtreLabel }}{% else %}Nos produits{% endif %}

{% if total == 0 %}Aucune pièce disponible pour cette sélection. {% elseif total == 1 %}1 pièce façonnée à la main, prête à trouver sa main. {% else %}{{ total }} pièces façonnées à la main, chacune unique.{% endif %}

{# ========================= LISTING ========================= #}
{# Tri, filtre « disponibles » et pagination vivent dans l'URL : chaque lien doit donc reconduire l'état courant. `sortParams` porte le tri (qui implique déjà « disponibles ») ou, à défaut, le filtre seul. #} {% set sortParams = tri ? { tri: tri } : (dispo ? { dispo: '1' } : {}) %} {% set navParams = routeParams|merge(sortParams) %} {# ---- Barre de filtres + tri ---- #}
{# Type produit #}
Tous {% for type in productTypes %} {{ type.label() }} {% endfor %}
{# Type couteau (si filtre = couteau) #} {% if currentFilter == 'couteau' %}
Tous les modèles {% for m in ['artisanal','aurillac','roddef','roquefort','london','beurrier','chasse'] %} {{ m == 'roddef' ? "Rodd'ef" : (m == 'chasse' ? 'Couteau de chasse' : m|capitalize) }} {% endfor %}
{% endif %} {# Variante aurillac #} {% if currentCouteau == 'aurillac' %}
{% endif %} {# Variante artisanal #} {% if currentCouteau == 'artisanal' %}
{% endif %}
{# Tri #}
{# Chaque entrée est une bascule : recliquer sur celle qui est active revient au listing par défaut. #}
Prix croissant Prix décroissant {% if tri %} {# Trier par prix n'a de sens que sur ce qui est encore à vendre : le filtre est imposé, donc verrouillé ici. #} Uniquement disponibles {% else %} Uniquement disponibles {% endif %}
{# ---- Carte cadeau (bandeau discret) ---- #} Une idée cadeau ? Carte de 50 à 500 € ou atelier de création à offrir — personnalisée, valable 12 mois. {# ---- Grille ---- #} {% if products is empty %}
{% if currentVariante is not null %} Aucun {{ filtreLabel|lower }} de type {{ filtreTypeCouteau|lower }} en variante {{ filtreVariante|lower }} pour le moment. Passez en boutique ! {% elseif currentCouteau is not null %} Aucun {{ filtreLabel|lower }} de type {{ filtreTypeCouteau|lower }} disponible. Passez en boutique ! {% elseif currentFilter is not null %} Aucun produit de type {{ filtreLabel|lower }} disponible. Passez en boutique ! {% else %} Aucune pièce disponible en ligne pour le moment. Passez en boutique ! {% endif %}
{% else %}
{% for product in products %} {{ include('accueil/_product_card_v2.html.twig', { product: product, slide: false, detailRoute: 'app_produit' }) }} {% endfor %}
{# Apparition en cascade : la 1re ligne est rendue telle quelle (sinon un vide s'installe en haut de grille au chargement), les lignes suivantes se révèlent au scroll. Script posé ici, juste après la grille, pour masquer les cartes concernées avant leur premier rendu. #} {# ---- Compteur + pagination ---- #}

{{ affiches }}/{{ total }} produit{{ total > 1 ? 's' }}

{% if pages > 1 %} {% endif %}
{% endif %}
{% endblock %} {% block other_javascripts %} {% endblock %}