2010-02-06 104 views

回答

0

這不是一個直接的解決方案,我從您的答覆中看到您以前的答案並不是最簡單的解決方案,但我想我會提到這個選項。 Menu Node API module維護一個Drupal缺少的表,一個節點菜單關係表。

該模塊本身不做任何事情,但似乎有建立在此基礎上的貢獻模塊,因此取決於問題的複雜程度,它可能是一個起點。

+0

有一種直接的方法可以做到這一點,它由lmeurs在同一頁上提供。 – asiby 2013-04-05 19:16:09

3

我是一個noob,所以不要打擊我,如果我要寫的是毫無價值的喋喋不休。

我認爲你不能直接這樣做,除非有一些聰明的模塊可以完成所有需要檢查的SQL查詢。

節點信息存儲在SQL表「節點」中,並且僅由NID(節點ID,它是在地址中的/?q = node /之後出現的節點號)標識。它們的別名(如果有的話)存儲在「url_alias」表中,您可以在其中找到列「src」和「dst」,標識原始路徑和別名路徑(例如,src ='node/123',dst ='my/URL /別名)。菜單鏈接可以在「menu_links」表中找到,您可以在其中找到列「menu_name」(菜單的機器可輻射名稱)和「link_path」(節點/ ...或別名)。

所以,你需要做的是以下幾點:

  1. 獲取當前節點的NID
  2. 查詢「url_alias」如果有節點/ NID的別名和檢索,否則離開節點/ NID
  3. 查詢路徑你確定和檢索「無」或菜單的機讀名稱

然後,您可以同時查詢表「menu_custom」,以檢查有什麼的「menu_links」表您已確定的菜單的人類可讀名稱。

無論如何,這是一個複雜的查詢(幾個查詢?),我是一個無知的MySQL,所以我不能幫助你用你需要用來檢查所有的實際代碼:P。

+1

一個更簡單的方法就是看節點 - $>路徑和查詢menu_links表。因此,一個單一的查詢,希望有一個更聰明/更容易內置的方式,我不能相信$ node對象不包含它屬於哪個菜單的信息! :/ – 2010-02-06 00:55:24

+0

哦,是的,你是對的。今天我一直在做手動數據庫調整(Worpress導入搞亂了一些信息),並且只是想着它:D。表「節點」包含信息行NID,VID,內容類型(頁面,故事...),用於創建和上次修改的時間戳,創建者的UID等等。可悲的是,沒有關於菜單。它在Drupal中反過來:它是將用戶引導到節點的菜單,而不是其他方式...... :( – mingos 2010-02-06 01:09:21

-1

http://drupal.org/node/584984

更新時間:對不起球員,甚至沒有意識到我已經張貼此鏈接。我認爲我打算將它作爲草稿,並在關閉標籤時發佈。也就是說,mingos(上圖)是正確的。 我的鏈接是一個函數menu_get_active_menu_name(),它似乎爲您提供了一個包含當前頁面的活動菜單的數組。正如我認爲這就是你正在使用它,這將是一個很好的方式來抽離你的數據庫調用,可能會導致問題。 我自己從來沒有嘗試過,這可能是我沒有詳細說明和發佈的原因。那麼......至少沒有故意發佈。

+0

我假設你指的是引用頁面上的例子,但它引用了一個函數,它將「獲取當前頁面的活動菜單 - 確定活動軌跡」,你還應該嘗試擴展你的帖子來解釋爲什麼你鏈接到某個東西 – electblake 2011-01-05 17:18:10

+0

哎喲...甚至不記得鏈接到這個,必須已經完成它作爲一個草稿和提交,我會編輯帖子 – 2011-02-09 15:43:26

10

也許這就是你的意思是:

$trail  = menu_get_active_trail(); 
$lastInTrail = end($trail); 
$menu_name = $lastInTrail['menu_name']; 

menu_get_active_trail()返回一個麪包屑狀陣列,最後的麪包屑表示當前節點。

乾杯, 勞倫斯米爾斯,鹿特丹

+0

這個解決方案的工作原理我剛剛在Drupal上試過7。 – asiby 2013-04-05 19:15:22

相關問題