|
@@ -133,75 +133,86 @@ function eql_preprocess_layout__threecol_25_50_25(&$variables) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
function eql_preprocess_views_view_unformatted(array &$variables) {
|
|
function eql_preprocess_views_view_unformatted(array &$variables) {
|
|
$view = $variables['view'];
|
|
$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) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|