2011-02-09 62 views
1

我有這個佈局文件叫做menuAdmin。 我希望每次給定的控制器和給定的動作處於活動狀態時,都會顯示具有特定類的「li」元素。Zend佈局 - 如何選擇一個菜單項?

所以,我有我的menuAdmin.php如下:

<li <?php echo ($this->controller == "d" && $this->action == "a") ? "class='selectedMenuItem'" : ''; ?>><a href="<?php echo $this->url(array("controller"=>"d","action"=>"a.d"))?>">Aaaa Dddd</a></li> 

我什麼也沒得到這個,如果我傾倒: var_dump($this->controller);var_dump($this->action);我得到NULL NULL

  • 所以我相信Zend在那時不會觸發那些。

問題: 我怎麼能完成這樣的任務呢?我應該遵循這條道路嗎?如果是這樣,我的menuAdmin佈局將如何知道控制器和操作是在什麼位置?

更新: menuAdmin.php是一個佈局文件,位於Zend結構的Layouts文件夾內。 這是一個大型應用程序,並且就地結構已經是這樣了 - 使用佈局文件作爲菜單,其中這只是其中的一個。

因此$ this-> controller和$ this-> action只能在控制器內部工作,或者如果我明確地將它傳遞給視圖。不過,在這種情況下,我想在佈局上調用它。爲什麼呢?因爲通過這樣做,我可以進行一次更改,並允許將這一更改複製到使用此佈局的所有視圖中。

關於上述說明,您的答案可能會改變嗎?

更新2: 我不知道這是相關或沒有,但,這一切menuadmin佈局從主佈局文件「佈局/ main.php」打來電話,還有我們有:<?php echo $this->render("menuadmin.php"); ?>

再次感謝

+1

爲什麼你不想使用Zend_Navigation?如果你真的必須在佈局中訪問請求對象(請參閱傑克的回答),請使用`$ request = Zend_Controller_Front :: getInstance() - > getRequest();` – Phil 2011-02-09 23:28:19

回答

3

取決於menuAdmin.php是你可以通過各種方式獲得控制器和操作。

如果你的文件是一個控制器,你可以做以下的一個,他們都做同樣的事情

$controller = $this->getRequest()->controller; 
$controller = $this->getRequest()->getParam("controller"); 
$controller = $this->getRequest()->getControllerName(); 

理想情況下,你應該使用Zend_Navigation來,雖然做到這一點。

1

您應該改爲使用Zend_Navigation,因爲這是一個內置功能。

編輯:要回答你關於null「controller」和「action」值的問題;除非你已經將它們設置爲控制器或控制器級別的其他東西(helper,plugin等)的視圖參數,當然它們將是空的。

相關問題