Как я могу загрузить заголовок родительского элемента в Drupal - PullRequest
3 голосов
/ 05 мая 2010

Я хочу расширить узлы заголовком родительского узла, чтобы я мог отобразить ссылку иерархии.

У меня есть решение, которое иногда работает:

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

Это работает, если заголовок элемента совпадает с заголовком меню. Однако я ищу решение, которое будет работать постоянно. Есть идеи?

1 Ответ

5 голосов
/ 13 мая 2010

Вы на самом деле не указали, что вы подразумеваете под «родительским узлом», но 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));

Первые два запроса могут быть объединены с помощью JOIN, но я настоятельно рекомендую не добавлять туда третий (вы можете использовать CONCAT ('node /', nid) = parent.link_path), потому что он не будет индексируемым , Эти три запроса должны быть практически мгновенными.

P.S. Вы не забудете проверить check_plain ($ title) перед печатью? :)

...