0

ノード更新時にメニューツリーの親を変更したい。「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."'");
}

問題は、更新されたこの$ nodeの下に、プライマリメニューの子メニュー項目もいくつかあることです。ノードを更新して親を変更すると、その子は1レベル上になり、現在の状態では移動しません。メニュー項目。メニューツリー全体をある親メニュー項目から別の親メニュー項目に移動する簡単な方法はありますか?

これ欲しい、

--parent1 _

--child1 _

---サブチャイルド1

---サブチャイルド2

--parent2 _

これになるために:

--parent1 _

--parent2 _

--child1 _

---サブチャイルド1

---サブチャイルド2

手伝って頂けますか?これを行うDrupalの方法はありますか?=)

このコードは多くの仮定をしていることを知っていますが、特定の1つの場合にのみ必要です

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 に答える