2014-11-05 22 views
1

我拼命嘗試渲染symfony-cmf中的子菜單。如何渲染symfony-cmf中的子菜單

結構:

page1 
    ├─p1-subpage1 
    ├─p1-subpage2 
    └─p1-subpage3 
page2 
    ├─p2-subpage1 
    └─p2-subpage2 

每當當前頁是page1層次也應該用p1-subpage*呈現菜單中的某個地方,當我在page2層次結構中,應該用p2-subpage*呈現菜單。從技術上講,這意味着它應該將當前項目設置爲第一級別的父級(如果它尚未在其上)並渲染一級節點(例如knp_menu_render('main', { depth: 1 }))。

該問題可以在兩個部分進行分割:

  1. 從一個給定節點
  2. 檢索當前節點

思想和試驗渲染一個(子)菜單

  • TWIG:已支持渲染子菜單作爲KnpMenu本身的功能,但尚未完成。解決方法registering a twig extension由問題中的某人提供。然而這個擴展是基於getCurrentItem方法has been removed with KNP-Menu 2.0。雖然CMF currently uses v1.1 of the knp-menubundle,這是怎麼回事to change soon
  • 嫩枝The CnertaBreadcrumbBundle會帶回這一功能,但上KNP-菜單2.0依賴爲好。
  • TWIGUsing a hack similar as suggested here。它檢查當前的URI,根據該使用的內容計算斜槓的數量和決定。這可能可行。問題在於:我沒有cmfMainContent變量定義,也不能在我的{{ dump() }}中找到類似的東西(不包含任何菜單)。
  • RouteVoter:CMF的本身具有一定的MenuVoters本身,這是有據可查的什麼他們,但不如何使用它們。我不認爲有任何辦法訪問該功能whithin樹枝也不知道如何攔截菜單建設

感謝您的幫助。

回答

1

看看這裏使用的選民做出什麼突出決策的例子: https://github.com/dbu/conference-tutorial-1.0/pull/20

從這個

一邊,我們對我們的MenuBundle的KnpMenu 2.x的兼容版本取得良好的進展,但它可能直到1月份,直到我們穩定發佈它(但是我們可能會提前一個..我們會看到): https://github.com/symfony-cmf/MenuBundle/pull/214

+0

盧卡斯:我認爲帕特里克希望的答案,https://github.com/symfony-cmf/MenuBundle/issues/57 - 我遺憾的是不知道 – dbu 2014-11-06 07:30:32

+0

謝謝。我不太明白它實際上做了什麼。 @dbu是完全正確的。 使用knpMenu 2.x會更容易嗎?我想知道爲什麼樹枝吸氣劑已被移除。 我可能會通過絕對定位子菜單結束一個討厭的js/css解決方案... – Patrick 2014-11-06 11:16:45

1

我昨天爲我自己的,類似的用例創建了一個包。

但是,由於我所有的頁面共享相同的路線,您可能需要對其進行相當多的調整。

我仍然認爲你可能會發現一些靈感,特別是對於你的問題的第二部分。

我的包: https://github.com/burki94/RecursiveMenuBundle/blob/master/README.md

AbstractRecursiveBuilder:https://github.com/burki94/RecursiveMenuBundle/blob/master/Menu/AbstractRecursiveBuilder.php

+0

感謝您的輸入!這看起來很有趣,但是我不知道如何將它嵌入到cmf中,因爲我不會自己構建菜單。 – Patrick 2014-11-06 11:18:23

+0

你應該在你的樹枝模板的某個地方有{{knp_menu_render('something')}}。 (請參閱:https://github.com/symfony-cmf/standard-edition/blob/1.2/src/Acme/DemoBundle/Resources/views/layout.html.twig)只需更換即可。如果您從文檔管理器中獲取「頁面」,請閱讀以下內容:http://symfony.com/doc/current/cmf/tutorial/the-frontend.html並將DocumentManger注入新的MenuBuilder以及其他服務。我不熟悉symfony-cmf,所以我不確定這會起作用。 – 2014-11-06 12:20:00

+0

我對cmf也不是很熟悉,所以我不太清楚如何配置和獲取頁面。但對我來說似乎是合理的。我可能會再試一次,但目前我找到了(不贊成使用的)解決方案.Thx – Patrick 2014-11-06 15:39:28

0

這是不是一個真正的解決方案,因爲它沒有按照我的是與KnpMenu 2 *兼容的要求。但是,這棄用解決方案很簡單:

 {% set currentItem = knp_menu_get('main').currentItem %} 
    {% if currentItem is not null %} 
      {% if currentItem.getLevel() == 1 %} 
        {% set main = currentItem %} 
      {% else %} 
        {% set main = currentItem.getParent() %} 
      {% endif %} 
      {{ knp_menu_render(main, { 'template': 'ComBundle:Default:left_menu.html.twig', 'currentClass': 'uk-active' }) }} 
    {% endif %}