2014-10-07 15 views
0

我正在使用Symfony2開發一個項目的前端。我的股票必須很簡單,但這花費了我很多時間。如何爲不同的網址顯示不同的菜單 - Symfony 2

layout.html.twig位於下列行

{% include 'SitewebFrontBundle::sidemenu.html.twig' %} 

{% block sidemenu %}{% endblock %} 

sidemenu.html.twig也位於/ FrontBundle /資源/視圖/ FrontBundle /資源/視圖。

根據頁面被查看,側面菜單有不同的內容。網址是:

address.com/menu1/... 
address.com/menu2/... 
address.com/menu3/... 

我想要做的是創造sidemenu.html.twig聲明如下就像一個邏輯:

if {{ app.request.requesturi }} has /menu1/ 
    show menu1 
else if {{ app.request.requesturi }} has /menu2/ 
    show menu2 
else 
    show menu3 

如何做到這一點任何想法?

+0

是否在url中找到菜單作爲變量(即'path:/ {menu}/page',其中菜單可以是menu1,menu2或menu3)意味着每個頁面可以有3個不同的菜單,或每個路由只能訪問相同的菜單(即'path:/ menu1/page',所以指定的菜單被硬編碼到路由中)? – qooplmao 2014-10-08 08:31:25

回答

0

生成您sidemenut.html.twig通過傳遞的參數:

# sidemenu.html.twig 
{% if requestUri is not defined %} 
    {% set requestUri = 'menu3' %} 
{% endif %} 

# render your routes here like so: 
<a href="{{ path('route-name-1', {menu: requestUri}) }}">Route 1</a> 
# ... 

現在包括sidemenu.html.twig與參數:

# this will result in the requestUri variable to be menu1: 
{% include 'SitewebFrontBundle::sidemenu.html.twig' with {includeUri: 'menu1'} %} 

# use the request uri as a parameter: 
{% include 'SitewebFrontBundle::sidemenu.html.twig' with {includeUri: app.request.requesturi} %} 

# this will fallback to 'menu3': 
{% include 'SitewebFrontBundle::sidemenu.html.twig' %} 

欲瞭解更多問題請查看:

+0

應該在第二個代碼塊中使用requestUri嗎? – Tony 2014-10-08 08:26:19

+0

它可能是。但它也可以是其他任何價值。儘管我已經添加了它來澄清。 – ferdynator 2014-10-08 10:27:24

0

您也可以使用KnpMenuBundle。然後創建合併單個root.eg下所有的菜單:使菜單一樣

Menu 
    menu1 
     foo 
    menu2 
    ... 

然後做一個twig extension,注入request到它,並找到哪個分支(菜單),你必須顯示:

//in your extension class: 
findBranch(){ 
    $path = $this->request->getPathInfo(); 
    $path = trim($path, '/'); 
    $parts = explode('/', $path); 
    $branch = $parts[0]; 
    return $branch; 

} 

然後在模板中找到活躍的分支使用擴展和使用使其在built-in method

0

爲什麼你不能只是把所有的菜單到一個樹枝,包括他們用一個變量來確定應該是什麼樣的菜單用過的?或者你可以從你的控制器發送所需的名稱到模板。因爲將這種邏輯放入樹枝通常是一個壞主意

相關問題