2010-05-05 2 views
3

Je souhaite étendre les nœuds avec le titre du parentnode afin que je puisse afficher un lien hiérarchique.Comment puis-je charger le titre de l'élément parent dans Drupal

J'ai une solution qui fonctionne parfois:

function modulename_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) 
{ 
    switch ($op) 
    { 
     case 'view': 
     loadParentTitle($node); 
     break; 
    } 
} 

function loadParentTitle(&$node) 
{ 
    $title = $node->title; 
    $query = "SELECT mlid, p1, p2,p4,p5,p6,p7,p8,p9 FROM menu_links WHERE link_title like '%%%s%%'"; 

    $data = db_fetch_array(db_query($query, $title)); 

    $mlid = $data["mlid"]; 
    $i = 9; 
    while (($data["p". $i] == 0 || $data["p". $i] == $mlid) && $i >= 0) 
    { 
     $i--; 
    } 
    if ($i > 0) 
    { 
     $query = "SELECT `link_title` as parentTitle from `menu_links` WHERE mlid = " . $data["p" . $i]; 
     $data = db_fetch_array(db_query($query)); 
     $parentTitle = ($data["parentTitle"]); 
    } 
    else 
    { 
     $parentTitle = $title; 
    } 
    $node->content['#parentTitle'] = $parentTitle; 
} 

Cela fonctionne aussi longtemps que le titre de l'article est le même que le titre du menu. Cependant, je suis à la recherche d'une solution qui fonctionnera tout le temps. Des idées?

+0

qu'est-ce que vous appelez le nœud parent? tu veux dire dans les menus? btw, si vous cherchez des miettes de pain, essayez le module Custom Breadcrumbs (http://drupal.org/project/custom_breadcrumbs) –

+0

Oui, je veux dire le nœud parent dans le menu. Je ne cherche pas de chapelure. Je veux rendre le lien/titre du parent dans le contenu du noeud. – wasigh

Répondre

5

Vous n'avez pas vraiment spécifié ce que vous voulez dire par 'parent node' mais le mlid du parent d'un lien de menu est stocké dans menu_links.plid. Maintenant, le link_path va être node/nid et vous pouvez aller chercher le titre à partir de là.

$mlid = db_result(db_query("SELECT plid FROM {menu_links} WHERE link_path = 'node/%d'", $node->nid)); 
$link_path = db_result(db_query("SELECT link_path FROM {menu_links} WHERE mlid = %d", $mlid)); 
$title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", substr($link_path, 5)); 

Les deux premières requêtes peuvent être unifiés par un JOIN mais je recommande fortement contre obtenir la troisième là aussi (vous pouvez avec CONCAT (« node/», JNV) = parent.link_path) parce que ce n'est pas va être indexable. Ces trois requêtes devraient être pratiquement instantanées.

P.S. Vous n'oublierez pas de check_plain ($ title) avant d'imprimer, n'est-ce pas? :)

+0

Tnx, fonctionne comme un charme! Il y a une erreur de syntaxe mineure: vous avez oublié une parenthèse à la fin de chaque ligne. Bien sûr, je vais vérifier_plain;), tnx pour la pointe! – wasigh

Questions connexes