如何更改父菜单项而不破坏Drupal中的子项?

时间:2010-12-07 18:31:03

标签: drupal menu tree move

我想在节点更新上更改菜单树的父级。我正在使用名为“rules”的模块来访问更新事件,我的代码如下:

if ($node->taxonomy[1] == "1") {
    $plid = 440;
} else if ($node->taxonomy[1] == "2") {
    $plid = 379;
}
if($plid) {
    db_query("UPDATE {menu_links} SET plid='".$plid."', p1='".$plid."' WHERE link_path='"."node/".$node->nid."'");
}

问题是这个更新的$节点下面还有一些子菜单项,在主菜单中,当我更新节点以更改父节点时,它的子节点只会高一级并且不会得到随当前菜单项移动。有一种简单的方法可以将整个菜单树从一个父菜单项移动到另一个菜单项吗?

我想要这个,

- 的 parent1

- child1

---子child1

---子的child2

- 的 parent2

是这样的:

- 的 parent1

- 的 parent2

- child1

---子child1

---子的child2

你能帮助我吗?有没有Drupal方式这样做? =)

我知道这段代码做了很多假设,但我只需要一个特定的案例

2 个答案:

答案 0 :(得分:0)

我通过试验API来解决这个问题:

<?php
    $result = db_query("SELECT mlid FROM {menu_links} WHERE link_path='%s'", "node/".$node->nid);
    $oldItem = db_fetch_array($result);
    $oldLinkItem = menu_link_load($oldItem[mlid]);
    $oldLinkItem[plid] = $plid;
    menu_link_save($oldLinkItem);
?>

只需要弄清楚在保存新菜单项时我没有必要处理那些“p0”到“p8”。 Drupal似乎会自动移动孩子们。顺便说一句,我可以使用更可靠的方法来获取mlid节点菜单项。

答案 1 :(得分:-1)

使用Drupal API执行这些操作;你会发现它更容易。如果你想使用数据库查询(我绝对不建议你这样做),你会编写一个执行树移动的递归算法。