Преглед на файлове

affichage toutes slide si filtres

ouidade преди 1 ден
родител
ревизия
9f1df3d54a
променени са 1 файла, в които са добавени 63 реда и са изтрити 51 реда
  1. 63 51
      web/themes/custom/eql/eql.theme

+ 63 - 51
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') {
+  if ($view->id() !== 'base_de_donnees') {
+    return;
+  }
 
-    $transliterator = \Drupal::service('transliteration');
+  $transliterator = \Drupal::service('transliteration');
+  $current_path = \Drupal::service('path.current')->getPath();
+  $request = \Drupal::request();
+  $query_params = $request->query->all();
 
-    $allowed_types = [
-      'type-paroles-de-laureats',
-      'type-publication-issue-du-programme-eqld',
-      'type-presse',
-      'type-projets-en-images',
-    ];
+  // 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'));
 
-    $slides = [];
-    foreach ($allowed_types as $type) {
-      $slides[$type] = [
-        'label' => ucwords(str_replace(['type-', '-', '---'], ['', ' ', ' / '], $type)),
-        'rows' => [],
-      ];
-    }
+  $filter_slides = $is_ressource_main && !$has_filters;
 
-    $unclassified_rows = [];
+  // 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',
+  ];
 
-    foreach ($variables['rows'] as &$row) {
-      $matched = FALSE;
+  $slides = [];
+  $unclassified_rows = [];
 
-      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));
+  foreach ($variables['rows'] as $row) {
+    if (!isset($row['content']['#node'])) {
+      $unclassified_rows[] = $row;
+      continue;
+    }
 
-          // ✅ Ajoute la classe sur le conteneur .views-row
-          if (!empty($row['attributes'])) {
-            $row['attributes']->addClass($type_class);
-          }
+    $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' => [],
+          ];
+        }
 
-          // ✅ 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);
+        // Ajouter la row dans le slide
+        $slides[$type_class]['rows'][] = $row;
+        $matched = true;
 
+        // Ajouter la classe CSS à la row
+        $row['attributes']->addClass($type_class);
 
-          if (isset($slides[$type_class])) {
-            $slides[$type_class]['rows'][] = $row;
-            $matched = TRUE;
-          }
+        // Ajouter aussi à l'article si possible
+        if (!isset($row['content']['#attributes']) || !($row['content']['#attributes'] instanceof Attribute)) {
+          $row['content']['#attributes'] = new Attribute();
         }
-      }
-
-      if (!$matched) {
-        $unclassified_rows[] = $row;
+        $row['content']['#attributes']->addClass($type_class);
       }
     }
 
-    $variables['grouped_rows'] = array_filter($slides, fn($s) => !empty($s['rows']));
-    $variables['unclassified_rows'] = $unclassified_rows;
-    $variables['rows'] = [];
+    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) {
 
 
 
+