Files
d9-eql/web/themes/custom/eql/eql.theme
T
2025-05-29 00:06:40 +02:00

317 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/*
* @files
* Theme Template Funtions
*/
// use Drupal\Core\Template\Attribute;
// use Drupal\Core\Link;
// use Drupal\Core\Url;
use Drupal\Component\Utility\Html;
use Drupal\Component\Transliteration\TransliterationInterface;
use Drupal\taxonomy\Entity\Term;
use Drupal\Core\Template\Attribute;
use Drupal\node\NodeInterface;
function eql_preprocess_html(&$variables) {
$node = \Drupal::routeMatch()->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 lURL
$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;
}