From 9f1df3d54ad1fa1befb5313d32347ba2e80a4a1f Mon Sep 17 00:00:00 2001 From: ouidade Date: Fri, 23 May 2025 09:17:38 +0200 Subject: [PATCH] affichage toutes slide si filtres --- web/themes/custom/eql/eql.theme | 142 +++++++++++++++++--------------- 1 file changed, 77 insertions(+), 65 deletions(-) diff --git a/web/themes/custom/eql/eql.theme b/web/themes/custom/eql/eql.theme index 1f07fff..a02fef9 100644 --- a/web/themes/custom/eql/eql.theme +++ b/web/themes/custom/eql/eql.theme @@ -133,75 +133,86 @@ function eql_preprocess_layout__threecol_25_50_25(&$variables) { + function eql_preprocess_views_view_unformatted(array &$variables) { $view = $variables['view']; - if ($view->id() === 'base_de_donnees') { - - $transliterator = \Drupal::service('transliteration'); - - $allowed_types = [ - 'type-paroles-de-laureats', - 'type-publication-issue-du-programme-eqld', - 'type-presse', - 'type-projets-en-images', - ]; - - $slides = []; - foreach ($allowed_types as $type) { - $slides[$type] = [ - 'label' => ucwords(str_replace(['type-', '-', '---'], ['', ' ', ' / '], $type)), - 'rows' => [], - ]; - } - - $unclassified_rows = []; - - foreach ($variables['rows'] as &$row) { - $matched = FALSE; - - if (!isset($row['content']['#node'])) { - $unclassified_rows[] = $row; - continue; - } - - $node = $row['content']['#node']; - - if ($node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) { - foreach ($node->get('field_type_de_ressource')->referencedEntities() as $term) { - $label = $term->label(); - $label_ascii = $transliterator->transliterate($label); - $type_class = 'type-' . Html::cleanCssIdentifier(strtolower($label_ascii)); - - // ✅ Ajoute la classe sur le conteneur .views-row - if (!empty($row['attributes'])) { - $row['attributes']->addClass($type_class); - } - - // ✅ Ajoute la classe aussi sur l'article (si tu veux) - // S’assurer que l’article a un attribut HTML - if (!isset($row['content']['#attributes']) || !($row['content']['#attributes'] instanceof Attribute)) { - $row['content']['#attributes'] = new Attribute(); - } - $row['content']['#attributes']->addClass($type_class); - - - if (isset($slides[$type_class])) { - $slides[$type_class]['rows'][] = $row; - $matched = TRUE; - } - } - } - - if (!$matched) { - $unclassified_rows[] = $row; - } - } - - $variables['grouped_rows'] = array_filter($slides, fn($s) => !empty($s['rows'])); - $variables['unclassified_rows'] = $unclassified_rows; - $variables['rows'] = []; + if ($view->id() !== 'base_de_donnees') { + return; } + + $transliterator = \Drupal::service('transliteration'); + $current_path = \Drupal::service('path.current')->getPath(); + $request = \Drupal::request(); + $query_params = $request->query->all(); + + // Active uniquement si on est sur la page /ressources sans filtres actifs + $is_ressource_main = $current_path === '/ressources'; + $has_filters = !empty(array_filter($query_params, fn($v) => $v !== '' && $v !== 'All')); + + $filter_slides = $is_ressource_main && !$has_filters; + + // Liste des types à restreindre uniquement sur /ressources sans filtres + $allowed_types = [ + 'type-paroles-de-laureats', + 'type-publication-issue-du-programme-eqld', + 'type-presse', + 'type-projets-en-images', + ]; + + $slides = []; + $unclassified_rows = []; + + foreach ($variables['rows'] as $row) { + if (!isset($row['content']['#node'])) { + $unclassified_rows[] = $row; + continue; + } + + $node = $row['content']['#node']; + $matched = false; + + if ($node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) { + foreach ($node->get('field_type_de_ressource')->referencedEntities() as $term) { + $label = $term->label(); + $label_ascii = $transliterator->transliterate($label); + $type_class = 'type-' . Html::cleanCssIdentifier(strtolower($label_ascii)); + + // Init slide si non encore créé + if (!isset($slides[$type_class])) { + $slides[$type_class] = [ + 'label' => $label, + 'rows' => [], + ]; + } + + // Ajouter la row dans le slide + $slides[$type_class]['rows'][] = $row; + $matched = true; + + // Ajouter la classe CSS à la row + $row['attributes']->addClass($type_class); + + // Ajouter aussi à l'article si possible + if (!isset($row['content']['#attributes']) || !($row['content']['#attributes'] instanceof Attribute)) { + $row['content']['#attributes'] = new Attribute(); + } + $row['content']['#attributes']->addClass($type_class); + } + } + + if (!$matched) { + $unclassified_rows[] = $row; + } + } + + // Appliquer le filtrage final si sur la page principale + $variables['grouped_rows'] = $filter_slides + ? array_filter($slides, fn($key) => in_array($key, $allowed_types), ARRAY_FILTER_USE_KEY) + : $slides; + + $variables['unclassified_rows'] = $unclassified_rows; + $variables['rows'] = []; // désactive affichage par défaut } @@ -213,3 +224,4 @@ function eql_preprocess_views_view_unformatted(array &$variables) { +