affichage toutes slide si filtres

This commit is contained in:
2025-05-23 09:17:38 +02:00
parent 86aaef30fc
commit 9f1df3d54a
+77 -65
View File
@@ -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)
// Sassurer que larticle 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) {