{# templates/analytics/_bloc_pays.html.twig ───────────────────────────────────────────────────────────────────────────── Bloc pays — affiché sur tous les niveaux. Paramètres attendus : pays (array) → [{'pays': 'FR', 'count': int}] — code ISO 2 lettres mode (string) → 'liste' (Essentiel) | 'carte' (Premium+) ───────────────────────────────────────────────────────────────────────────── #} {# ── Table de drapeaux emoji (pas besoin de twig/string-extra) ── #} {% set paysDrapeaux = { 'FR': '🇫🇷', 'BE': '🇧🇪', 'CH': '🇨🇭', 'LU': '🇱🇺', 'CA': '🇨🇦', 'MA': '🇲🇦', 'TN': '🇹🇳', 'DZ': '🇩🇿', 'SN': '🇸🇳', 'CI': '🇨🇮', 'CM': '🇨🇲', 'DE': '🇩🇪', 'ES': '🇪🇸', 'IT': '🇮🇹', 'GB': '🇬🇧', 'US': '🇺🇸', 'PT': '🇵🇹', 'NL': '🇳🇱', 'RE': '🇷🇪', 'GP': '🇬🇵', 'MQ': '🇲🇶', 'GF': '🇬🇫', 'NC': '🇳🇨', 'PF': '🇵🇫', 'BR': '🇧🇷', 'MX': '🇲🇽', 'AR': '🇦🇷', 'CL': '🇨🇱', 'JP': '🇯🇵', 'CN': '🇨🇳', 'IN': '🇮🇳', 'AU': '🇦🇺', 'ZA': '🇿🇦', 'NG': '🇳🇬', 'KE': '🇰🇪', 'GH': '🇬🇭', 'PL': '🇵🇱', 'RU': '🇷🇺', 'TR': '🇹🇷', 'SA': '🇸🇦', 'AE': '🇦🇪', 'SG': '🇸🇬', 'HK': '🇭🇰', 'KR': '🇰🇷' } %} {% set totalPays = 0 %} {% for row in pays %} {% set totalPays = totalPays + row.count %} {% endfor %} {# ── Noms complets des pays les plus courants ── #} {% set paysNoms = { 'FR': 'France', 'BE': 'Belgique', 'CH': 'Suisse', 'LU': 'Luxembourg', 'CA': 'Canada', 'MA': 'Maroc', 'TN': 'Tunisie', 'DZ': 'Algérie', 'SN': 'Sénégal', 'CI': 'Côte d\'Ivoire','CM': 'Cameroun', 'DE': 'Allemagne', 'ES': 'Espagne', 'IT': 'Italie', 'GB': 'Royaume-Uni', 'US': 'États-Unis', 'PT': 'Portugal', 'NL': 'Pays-Bas', 'RE': 'La Réunion', 'GP': 'Guadeloupe', 'MQ': 'Martinique', 'GF': 'Guyane', 'NC': 'Nouvelle-Calédonie', 'PF': 'Polynésie française' } %}

🌍 Pays d'origine

{{ jours }} derniers jours
{% if pays is empty %}

Aucune donnée sur la période.

{% else %} {# ══════════════════════════════════════════════════════════════════ MODE LISTE — Essentiel Tableau simple : drapeau + nom + count, max 10 lignes ══════════════════════════════════════════════════════════════════ #} {% if mode == 'liste' %} {% for row in pays | slice(0, 10) %} {% set pct = totalPays > 0 ? ((row.count / totalPays) * 100) | round(1) : 0 %} {% set nom = paysNoms[row.pays] ?? row.pays %} {% endfor %}
Pays Vues %
{# Emoji drapeau via les Regional Indicator Symbols Unicode #} {{ paysDrapeaux[row.pays] ?? '🏳' }} {{ nom }} {{ row.count }} {{ pct }}%
{% if pays | length > 10 %}

+ {{ pays | length - 10 }} autre{{ pays | length - 10 > 1 ? 's' : '' }} pays

{% endif %} {# ══════════════════════════════════════════════════════════════════ MODE CARTE MONDE — Premium, FDV, Multi Chart.js choropleth via chartjs-chart-geo ══════════════════════════════════════════════════════════════════ #} {% elseif mode == 'carte' %} {# Top 10 en liste au-dessus de la carte #}
{% for row in pays | slice(0, 5) %} {% set pct = totalPays > 0 ? ((row.count / totalPays) * 100) | round(1) : 0 %} {% set nom = paysNoms[row.pays] ?? row.pays %}
{{ loop.index }} {{ nom }} {{ row.count }} vue{{ row.count > 1 ? 's' : '' }}
{% endfor %} {% if pays | length > 5 %}

+ {{ pays | length - 5 }} autre{{ pays | length - 5 > 1 ? 's' : '' }} pays

{% endif %}
{# Carte monde #}
{# Chart.js Geo — chargé uniquement si on est en mode carte #} {% endif %} {% endif %}