2012-09-10 77 views
0

我想在有人將鼠標懸停在菜單按鈕上時製作一個縮小框,即時生成帶有KnpMenuBundle的菜單。如何添加一個div到KnpMenu(Symfony2.1)

我想要得到的是這樣的結構:

<lu> 
    <li><a>...</a></li> 
    <li> 
     <a>...</a> 
     <div>...</div> 
    </li> 
    <li><a>...</a></li> 
<lu> 

如果可能的話我想從DIV中呈現的控制器。

可以這樣做嗎?

如果我錯過了文檔中的東西請張貼鏈接,因爲我一直在尋找了幾個小時......

回答

2

這是可以做到的,我曾經做過正是這一點,但這樣的事情是否應該做的事使用KnpMenuBundle我不太確定!無論如何,我通過將我的MenuBuilder類定義爲服務並注入@templating服務來實現這一點。這不叫一個控制器動作,正如你所說的,但可以讓你呈現你想要的任何模板...

/** 
* @param Request $request 
* @return \Knp\Menu\ItemInterface 
*/ 
protected function createUserMenuLoggedOut(Request $request) 
{ 
    $menu = $this->factory->createItem('root'); 

    $signInItem = $menu->addChild('Sign in', array('route' => 'fos_user_security_login')); 
    $signInItem 
     ->setLinkAttributes(array(
      'id' => 'sign-in-link', 
      'class' => 'dropdown-toggle', 
      'data-toggle' => 'dropdown', 
      'data-target' => '#signin' 
     )) 
     ->setAttributes(array(
      'id' => 'signin', 
      'class' => 'dropdown' 
     )) 
    ; 

    // THIS IS THE LINE YOU'RE INTERESTED IN 
    $signInItem->addChild($this->templating->render('ApplicationSonataUserBundle:Security:login_options.html.twig')); 

    // more menu items... 

    return $menu; 
} 

如果我沒有記錯,我覺得這結束了在附加<ul>...</ul>但這種包裝的模板在造型之後沒有造成太多問題。

+0

謝謝我現在就試試我。另外我剛剛發現這個:[github示例](https://gist.github.com/2278437),可能對其他有用。如果不應該這樣做KnpMenuBundle你用什麼菜單? –

+0

這將是的,當我** **會使用KnpMenuBundle一個例子,因爲它正在渲染的子菜單(如:'

    • 兒童1
    • 兒童2
  • <! - 更多的頂級菜單項... - >
')作爲頂級菜單項。如果我發現自己不得不篡改菜單來控制HTML輸出,我傾向於使用老式的樹枝模板。 – RobMasters