Voilà, voilà... Fin de l'aventure...

 

Fermeture de kolossaldrupal.org dans...


Bonjour tout le monde,

Drupal évolue, les versions changent et Kolossaldrupal.org était essentiellement consacré à la version 6 de Drupal.

Autant dire que les infos présentées ici commencent à dater...

Faute de temps, je ne peux plus garder le site Kolossaldrupal à jour...

Je vous aurais bien proposé de reprendre le flambeau mais... c'est tellement simple de nos jours de se faire son propre site à soi...Pourquoi s'embêter alors ? :-)

Ce site restera donc en l'état, tel qu'il était en 2011...

Ah la la ! Cela ne nous rajeunit pas !

Manuel Vila - Avril 2016

Ajouter un menu par défaut aux nodes sans menus

Date du document original en anglais : 23 Août 2009 - 19h17 - http://drupal.org/node/369854  



Quand il s'agit de gérer des nodes il y en a toujours qui ne peuvent être rattachés à aucun des items du menu principal. Ainsi, pour le site sur lequel je travaille actuellement (ce n'est pas kolossaldrupal qui parle, c'est l'auteur de l'article en anglais. NDT), certains nodes ont besoin d'un menu par défaut même s'ils ne font pas partie des liens de menus principaux qui sont affichés sur la plupart des nodes.

Voici l'idée

  • D'abord contrôlez la table menu_links pour voir s'il existe une ligne pour le chemin en cours (par exemple « node/1 »)
  • Ensuite, si rien n'a été trouvé, cherchez le chemin du menu par défaut que l'on veut utiliser
  • Paramétrez le menu par défaut comme item de menu courant (menu_set_item)

C'est tout.

<?php
/**
* La toute-puissante fonction de pré-traitement, si commode
* Paramétrez le nouvel item ici pour être sûr qu'il soit
disponible pour l'affichage.
*/
function mysite_preprocess_node(&$variables) {
    
$node $variables['node'];
    
// paramétrer le menu par défaut si besoin.
    
_set_default_menu($node->nid);
}

/**
* Un menu est défini pour la plupart des items. Mais nous
* devons en définir un pour ceux qui n'en ont pas.  
*/
function _set_default_menu($nid){
    if (!
node_has_menu("node/$nid")) {
        
$menu _find_default_menu($nid);
    }
}

// le node a-t-il un menu ?
function node_has_menu($path) {
    
$sql "SELECT 'TRUE' FROM drupal_menu_links ";
    
$sql .= "WHERE menu_name IN ('primary-links') AND ";
    
$sql .= "link_path = '%s'";
    
$result db_result(db_query($sql$path));
    return 
$result;
}

/**
* Ici, le menu par défaut existe. Vous pouvez trouver votre
* menu par défaut de différentes façons, 
* par l'utilisation d'une taxonomy existante appliquée à un
* node ou par n'importe quel autre champ appliqué au node, ou
* même par une variable par défaut. 
*/
function _find_default_menu($nid) {
    
$sql "SELECT link_path FROM drupal_menu_links WHERE plid = 0 AND ";
    
$sql .= "menu_name IN ('primary-links') AND link_title = '%s'";
    
$link db_result(db_query($sql'Some Menu'));

    
$router_item menu_get_item($link);
    
// ne pas paramétrer si router_item est vide
    
if($router_item) {
        
menu_set_item("node/$nid"$router_item);
    }
}
?>