2009-02-16 72 views
3

雖然我發現PHP Symfony框架在很多方面都很出色,但我發現很難爲網站創建易於擴展的動態菜單。如何在Symfony中創建一個動態菜單

我想知道其他Symfony開發者如何處理這個問題。 我會舉一個簡單的例子來說明我在問什麼。

如果轉到www.fool.com,您會看到他們有一個典型的菜單設置。其中一個類別的列表是以CSS突出顯示的活動類別。

什麼是在Symfony項目中動態創建的好方法。將某種模塊的變量傳遞給模塊。我還沒有找到一個優雅的解決方案。

回答

4

通常,我只是手動建立一個模塊/動作組合的數組,我想要在我的菜單中出現。這將會是相當容易抓住從動態源信息(如配置文件或數據庫):

$this->menu = array(
    'Home' => array('default', 'index'), 
    'About Us' => array('default', 'aboutUs'), 
    'Products' => array('products', 'index') 
); 

然後,我用控制器的getActionName和getMethodName方法來確定這在我的菜單項當前之一:

$this->current = array_search(array($this->getModuleName(), $this->getActionName()), $this->menu); 

然後,我可以遍歷$菜單,從模板內,建立菜單。我可以將這些項目與$ current進行比較,以確定是否應該在菜單項<li>上設置「當前」類。

您提供的fool.com示例有點複雜,因爲它是兩個級別。在這種情況下,您可能希望從數據庫生成菜單樹,可能使用Propel的嵌套集支持。

+0

這樣做很有道理,我只是想知道我是否錯過了一些東西。 – Failpunk 2009-02-20 07:29:42