2013-03-22 97 views
1

似乎我記得在Zend Framework中,我們可以通過headScript在頁面的動作中添加樣式/腳本。在Zend2中,這似乎不是一種選擇。Zend Framework 2標題

我沒有看到有關處理這個文件很多。 基本上我的問題是,在視圖中添加這些樣式/腳本是否正確?或者有沒有新的方式將它們添加到控制器操作中?

感謝

+0

查看headScript()視圖幫助 - > http://framework.zend.com/manual/2.1/en/modules/zend.view.helpers.html#headscript-helper – Crisp 2013-03-22 19:02:49

+0

是的,我看到了這個...並且我理解它在佈局中的工作原理,但是如何將腳本或樣式添加到特定視圖?行動中是否有可用的方法?我應該在視圖中重複一遍嗎?文件不是很清楚。 – aserwin 2013-03-22 19:05:01

+0

是的,助手可以在視圖和佈局中使用,我認爲唯一的警告可能是您需要在視圖中使用前置,但是ymmv。 – Crisp 2013-03-22 19:08:55

回答

9

在你的控制器動作:

$this 
    ->getServiceLocator() 
    ->get('viewhelpermanager') 
    ->get('HeadScript') 
    ->appendFile('/js/custom.js') 
; 

你可以通過創建一個「可調用」「服務定位感知」控制插件使它更容易些。

你可以在你的模塊配置文件:

... 
'controller_plugins' => array(
    'invokables' => array(
     'Head' => 'Application\Controller\Plugin\Head', 
    ) 
), 
... 

module/Application/src/Application/Controller/Plugin/Head.php實現ServiceLocatorAwareInterface創建「頭」類,並建立一些方法,如javaScript()styleSheet例如,簡單地抓住視圖助手和返回它:

return $this 
    ->getServiceLocator() 
    ->getServiceLocator() // Main service Locator 
    ->get('viewhelpermanager') 
    ->get('HeadScript') 
; 

然後在您的控制器,它更像是:

$this->Head()->javaScript()->appendFile('/js/custom.js'); 

雖然你可以像你想要的那樣喜歡它。也許甚至Magento風格與XML控制佈局每個動作。

UPDATE

輸出是,如果你正在使用ZF2 MVC緩衝。所以,我已經發現,添加腳本和樣式表的頁面最好從連接到您的視圖模型模板文件中完成:

$this->headScript()->appendFile('/js/custom.js', 'text/javascript');

$this->headLink()->appendStylesheet('/css/custom.css');

保持它的控制器,因爲它是視圖有關。

0

我不明白馬歇爾豪斯談話是怎麼回事。

插件需要實現PluginInterface。爲什麼實現ServiceLocatorAwareInterface?

粘貼這個代碼在哪裏?

return $this 
->getServiceLocator() 
->getServiceLocator() // Main service Locator 
->get('viewhelpermanager') 
->get('HeadScript'); 

另外AbstractPlugin(如果從它擴展)沒有getServiceLocator()方法。什麼意思? 主要服務定位器?請寫一些例子。

+0

這將是控制器插件中'javascript()'方法的內容。 – 2015-01-06 15:41:10

+0

現在我明白Zend有更多的經驗).. – 2015-01-08 04:54:22