我正在創建一個網站並已成功獲取我的導航菜單使用存儲在數據庫中的樹結構工作。在Symfony2中構建麪包屑
一個Menu
對象爲active
屬性,但我不知道如何去了解它設置爲活動!如果我能做到這一點,那麼我可以獲得當前活動的Menu
的路徑,並使用WhiteOctober的BreadcrumbsBundle或類似的東西渲染麪包屑。
我已經閱讀了很多關於SO的問題,並且還查看了可用的不同捆綁包,但我仍然停留在如何執行此操作。
我該如何去找出菜單項設置爲活動?
編輯:
- Menu類:https://gist.github.com/robcaw/c76426957ea6f262d217#file-gistfile1-php
- 菜單控制器:https://gist.github.com/robcaw/af18e7c0e61f109e9bda#file-gistfile1-php
編輯2:
好吧,我幾乎做到了。我設法比較了當前路徑,使用$this->container->get('request')->getPathInfo();
到Menu
的集合url
。
爲此,我需要將菜單樹結構展平成一個數組。當我使用DoctrineExtensions的樹擴展時,我使用其存儲庫的getChildren($node)
來執行此操作。所以現在迭代數組很容易,可以比較url和路徑。
在麪包屑控制器中,我可以通過菜單控制器中的$current_item
,並再次使用Tree存儲庫及其遞歸獲取給定節點的父母的方法(getPath()
)。
但是,仍然存在問題,因爲網站上的某些頁面沒有菜單項。因此,例如,如果我訪問site.com/news/tags/stuff
,它沒有菜單條目,因此打破了網站。
到目前爲止:
- MenuController:https://gist.github.com/robcaw/61383e26d0a7637bb3f1#file-gistfile1-php
- BreadcrumbController:https://gist.github.com/robcaw/62341672db576fcb2864#file-gistfile1-txt
你想要在你的樹枝模板或控制器中的當前活動頁面?你能向我們展示你的菜單嗎? (我猜它不僅有一個'active'屬性) – cheesemacfly
你是對的,它不只是擁有那個屬性。該文件超過400行,因此我在問題中添加了一個鏈接。菜單的樹形結構工作正常,這就是爲什麼我添加了「active」屬性,因此我可以將相關的「Menu」項目設置爲活動項目。我只是不知道如何找出當前的項目! – Robin
我想你將不得不比較'Menu'對象的'$ url'屬性與當前路徑。你有一個代碼小例子,展示瞭如何在你的控制器/樹枝模板中使用這個'Menu'對象? – cheesemacfly