Как изменить родительский пункт меню, не ломая потомков в Drupal? - PullRequest
0 голосов
/ 07 декабря 2010

Я хочу изменить родительский элемент дерева меню при обновлении узла.Я использую модуль с именем «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

--- sub-child1

--- sub-child2

- parent2

быть таким:

- parent1

- parent2

- child1

--- sub-child1

--- sub-child2

Можете ли вы мне помочь? Есть ли способ сделать это на Drupal?=)

Я знаю, что этот код делает много предположений, но он мне нужен только для одного конкретного случая

Ответы [ 2 ]

0 голосов
/ 09 декабря 2010

Я понял это, экспериментируя с 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" при сохранении нового пункта меню. Друпал, кажется, автоматически перемещает детей. Кстати, я мог бы использовать более надежный способ получения пункта меню mlid of узлов.

0 голосов
/ 08 декабря 2010

Используйте Drupal API для выполнения этих операций; Вы найдете это намного проще. Если вы хотите сделать это с помощью запросов к базе данных (что я вам абсолютно не советую), вы бы написали рекурсивный алгоритм, выполняющий перемещение дерева.

...