getParameter('node'); if ($node instanceof \Drupal\node\NodeInterface) { $variables['attributes']['class'][] = 'node-type-' . $node->bundle(); $variables['attributes']['class'][] = 'node-id-' . $node->id(); // Liste des champs à traiter pour générer des classes dynamiques $fields_to_classify = [ 'field_type_de_ressource' => 'type-', 'field_type_de_media' => 'type-media-', ]; foreach ($fields_to_classify as $field_name => $prefix) { if ($node->hasField($field_name) && !$node->get($field_name)->isEmpty()) { foreach ($node->get($field_name)->referencedEntities() as $term) { $label = $term->label(); $css_class = $prefix . Html::cleanCssIdentifier(strtolower($label)); $variables['attributes']['class'][] = $css_class; } } } } } function eql_preprocess_node(&$variables){ $node = &$variables['node']; $variables['attributes']['class'][] = 'node-type-' . $node->gettype(); if($node->gettype() == "actualite") { $actu_type = $node->get('field_actu_type')->getString(); $variables['attributes']['class'][] = 'actu-type-' . $actu_type; } if($node->gettype() == "offre_de_service") { $type_protagoniste = $node->get('field_type_de_protagoniste')->getString(); $variables['attributes']['class'][] = 'type-de-protagoniste-' . $type_protagoniste; } if ($node->getType() === 'ressource' && $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(); // ex: "Presse" $class = 'type-' . Html::cleanCssIdentifier(strtolower($label)); $variables['attributes']['class'][] = $class; } } } function eql_preprocess_page(array &$variables) { $node = \Drupal::routeMatch()->getParameter('node'); if ($node instanceof \Drupal\node\NodeInterface && $node->bundle() === 'ressource') { 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(); $css_class = 'type-' . \Drupal\Component\Utility\Html::getClass($label); // S'assurer que les attributs existent if (!isset($variables['page']['top']['#attributes'])) { $variables['page']['top']['#attributes'] = ['class' => []]; } $variables['page']['top']['#attributes']['class'][] = $css_class; } } } } function eql_preprocess_block(array &$variables) { // Vérifie si on est sur une page node de type 'ressource' $route_match = \Drupal::routeMatch(); $node = $route_match->getParameter('node'); if ($node instanceof \Drupal\node\NodeInterface && $node->bundle() === 'ressource') { $variables['is_ressource_page'] = TRUE; } else { $variables['is_ressource_page'] = FALSE; } } function eql_preprocess_field(&$variables) { $node = \Drupal::routeMatch()->getParameter('node'); $field_name = &$variables['field_name']; if($node) { if ($field_name == 'field_type_de_protagoniste'){ $type_protagoniste = $node->get('field_type_de_protagoniste')->getString(); $variables['attributes']['class'][] = 'type-de-protagoniste-' . $type_protagoniste; } } $field_name = &$variables['field_name']; if($node) { if ($field_name == 'field-type-de-ressource'){ $type_ressource = $node->get('field-type-de-ressource')->getString(); $variables['attributes']['class'][] = 'type-de-ressource-' . $type_ressource; } } } //////////// function eql_preprocess_layout__threecol_25_50_25(&$variables) { $node = \Drupal::routeMatch()->getParameter('node'); if($node->gettype() == "projet"){ $variables['content']['top_bottom'] = []; /////// déclare les nvx array $variables['content']['top_right'] = []; $variables['content']['top_left'] = []; $variables['content']['top_bottom_left'] = []; foreach ($variables['content']['top'] as $key => $value) { if(isset($value['#base_plugin_id']) && $value['#base_plugin_id']== 'entity_field'){ ////// isset pour voir si existe && si oui fait ce que tu as à faire. $Value c'est l'attribut if($value['#derivative_plugin_id']=="node:field_region" || $value['#derivative_plugin_id']=="node:field_adresse") { $variables['content']['top_bottom_left'][] = $variables['content']['top'][$key]; unset($variables["content"]["top"][$key]); } if($value['#derivative_plugin_id']=="node:field_type_de_moa" || $value['#derivative_plugin_id']=="node:field_type_de_projet" || $value['#derivative_plugin_id']=="node:field_etape_du_projet") { $variables['content']['top_bottom'][] = $variables['content']['top'][$key]; unset($variables["content"]["top"][$key]); } if($value['#derivative_plugin_id']=="node:title" || $value['#derivative_plugin_id']=="node:field_equipe" || $value['#derivative_plugin_id']=="node:field_incube"){ $variables['content']['top_right'][] = $variables['content']['top'][$key]; unset($variables["content"]["top"][$key]); } if($value['#derivative_plugin_id']=="node:field_photo"){ $variables['content']['top_left'][] = $variables['content']['top'][$key]; unset($variables["content"]["top"][$key]); } } } } if ($node && $node->getType() === 'ressource') { if ($node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) { $terms = $node->get('field_type_de_ressource')->referencedEntities(); if (!empty($terms)) { foreach ($terms as $term) { if ($term instanceof \Drupal\taxonomy\Entity\Term) { $label = $term->label(); $css_class = 'type-' . \Drupal\Component\Utility\Html::cleanCssIdentifier(strtolower($label)); if (!isset($variables['region_attributes']['top'])) { $variables['region_attributes']['top'] = new \Drupal\Core\Template\Attribute(); } $variables['region_attributes']['top']->addClass($css_class); } } } } // Champ : field_type_de_media if ($node->hasField('field_type_de_media') && !$node->get('field_type_de_media')->isEmpty()) { $terms = $node->get('field_type_de_media')->referencedEntities(); foreach ($terms as $term) { if ($term instanceof \Drupal\taxonomy\Entity\Term) { $media_label = $term->label(); $css_class = 'type-media-' . \Drupal\Component\Utility\Html::cleanCssIdentifier(strtolower($media_label)); if (!isset($variables['region_attributes']['top'])) { $variables['region_attributes']['top'] = new \Drupal\Core\Template\Attribute(); } $variables['region_attributes']['top']->addClass($css_class); } } } } } function eql_preprocess_views_view_unformatted(array &$variables) { $view = $variables['view']; 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-publications-issues-du-programme-eqld', 'type-presse', 'type-les-projets-en-images', // 'type-autres', // 'type-evenements', 'type-publications-des-partenaires-et-laureats', ]; $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(); $tid = $term->id(); // <-- on récupère l'ID $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, 'tid' => $term->id(), '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 $variables['is_filtered'] = !$filter_slides; } function eql_preprocess_form(&$variables) { $terms = \Drupal::entityTypeManager() ->getStorage('taxonomy_term') ->loadTree('type_de_media'); $transliterator = \Drupal::service('transliteration'); $media_links = []; // Récupère la valeur actuelle du filtre dans l’URL $request = \Drupal::request(); $active_tid = $request->query->get('field_type_de_media_target_id'); foreach ($terms as $term) { $slug = Html::cleanCssIdentifier(strtolower($transliterator->transliterate($term->name))); $slug = Html::cleanCssIdentifier($slug); // Nettoie pour CSS $media_links[] = [ 'tid' => $term->tid, 'label' => $term->name, 'slug' => $slug, 'active' => (string)$term->tid === $active_tid, // <-- True si c'est celui sélectionné ]; } $variables['media_links'] = $media_links; }