was*_*igh 3 php drupal nodeapi
我想扩展具有父节点标题的节点,以便我可以显示层次结构链接.
我有一个解决方案,有时工作:
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;
}
Run Code Online (Sandbox Code Playgroud)
只要项目的标题与菜单标题相同,这就有效.但是,我正在寻找一个可以一直工作的解决方案.有任何想法吗?
您没有真正指定"父节点"的含义,但菜单链接的父节点的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));
Run Code Online (Sandbox Code Playgroud)
前两个疑问可以通过统一一个加入,但我强烈反对使第三在那里太(你可以用CONCAT("节点/",NID)= parent.link_path),因为这是不会被索引的.这三个查询应该是即时的.
PS打印前你不会忘记check_plain($ title),不是吗?:)
| 归档时间: |
|
| 查看次数: |
3179 次 |
| 最近记录: |