2010-05-05 1 views
3

상위 노드의 제목으로 노드를 확장하여 계층 구조 링크를 표시 할 수 있습니다. 이것은 한 항목의 제목 메뉴 제목과 동일로 작동Drupal에서 상위 항목의 제목을로드하는 방법

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; 
} 

:

은 가끔 작동하는 해결책을 가지고 있습니다. 그러나 나는 항상 작동하는 솔루션을 찾고 있어요. 어떤 아이디어?

+0

부모 노드 란 무엇입니까? 메뉴를 말하는거야? btw, 빵 부스러기를 찾으려면 Custom Breadcrumbs 모듈 (http://drupal.org/project/custom_breadcrumbs)을 시도하십시오. –

+0

예, 메뉴의 부모 노드를 의미합니다. 나는 빵 부스러기를 찾고 있지 않다. 노드의 내용에서 부모의 링크/제목을 렌더링하고 싶습니다. – wasigh

답변

5

당신은 '부모 노드'가 무엇을 의미하는지 정말로 지정하지 않았지만 메뉴 링크의 부모의 mlid는 menu_links.plid에 저장됩니다. 이제 link_path가 node/nid가되어 거기에서 제목을 가져올 수 있습니다.

$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)); 

처음 두 쿼리는 가입으로 통합 할 수 있지만 난 강력 너무 거기에 세 번째를 받고에 추천 (당신은 CONCAT으로 ('노드 /', NID) = parent.link_path을 수행 할 수 있습니다) 그 없기 때문에 색인을 생성 할 수 있습니다. 이 세 가지 쿼리는 실질적으로 순간적이어야합니다.

P. 인쇄하기 전에 check_plain ($ title)을 잊지 않을 것입니다. :)

+0

Tnx는 매력처럼 작동합니다! 사소한 구문 오류가 있습니다. 모든 행의 끝에 괄호를 잊어 버렸습니다. 물론 팁입니다. check_plain;), 팁은 tnx! – wasigh