0

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

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."'");
}

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

我要这个,

-父母1

--孩子1

---子子1

---子子2

-父母2

变成这样:

-父母1

-父母2

--孩子1

---子子1

---子子2

你能帮助我吗?有没有一种 Drupal 的方式来做到这一点?=)

我知道这段代码做了很多假设,但我只需要它来处理一个特定的情况

4

2 回答 2

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。

于 2010-12-09T10:34:37.613 回答
-1

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

于 2010-12-08T18:27:11.373 回答