2012-04-01 60 views
7

我想爲我的應用程序中的特定模塊加載特定的樣式/腳本資源。在Zend Framework中引導模塊特定的樣式/腳本

這裏是我的應用程序結構:

-application 
    -configs 
    -controllers 
    -forms 
    -layouts 
    -models 
    -modules 
    -admin 
     -configs 
     -controllers 
     -models 
     -views 
     -Bootstrap.php 
    -views 
    -Bootstrap.php 

我遇到的問題是:在樣式和腳本我加載通過headLink()/application/modules/admin/Bootstrap.phpheadScript也被加載在我的控制器是/行動admin模塊中不是。這裏是我的Bootstrap.php

/application/Bootstrap.php

protected function _initDoctype() 
{ 
    $this->_logger->info('Bootstrap ' . __METHOD__); 

    //init the view 
    $this->bootstrap('view'); 
    $view = $this->getResource('view'); 
    $view->doctype('XHTML1_STRICT'); 

    //Set title and separator 
    $view->headTitle('Sunny Rose Photography') 
     ->setSeparator(' | '); 

    //Load global stylesheets 
    $view->headLink()->appendStylesheet('/styles/styles_main.css') 
     ->headlink()->appendStylesheet('/scripts/jquery-ui-1.8.17/themes/base/jquery-ui.css'); 

    //Load Scripts 
    $view->headScript()->prependFile('/scripts/jquery-1.7.1/jquery-1.7.1.js') 
     ->headScript()->appendFile('/scripts/jquery-ui-1.8.17/ui/minified/jquery-ui.min.js') 
     ->headScript()->appendFile('/scripts/gallery.js') 
     ->headScript()->appendFile('/scripts/scripts_main.js'); 
} 

/application/modules/admin/Bootstrap.php

protected function _initDoctype() 
{ 
    $this->bootstrap('view'); 
    $view = $this->getResource('view'); 
    $view->headLink()->appendStylesheet('/styles/admin/styles_admin.css'); 
    $view->headScript()->appendFile('/scripts/admin/scripts_admin.js'); 
} 

我可以看到也許它爲什麼這樣做:因爲我得到的觀點從主靴(?)。我的問題是,如何加載模塊特定的樣式表和/或腳本文件?

我很抱歉,如果這是一個重複的問題,我搜索了問題的標題的各種措辭,我沒有找到任何決定性的。

謝謝,在每次請求被執行 肯

回答

4

它不可能在引導時確定模塊的名稱。只有在routeShutdown之後,您纔會瞭解模塊名稱。如果您使用的佈局,然後打開的application.ini

resources.layout.pluginClass = "My_Layout_Controller_Plugin_Layout" 

class My_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout 
{ 

public function routeShutdown($request) 
{ 
    $moduleName = $request->getModuleName(); 

if($moduleName == 'admin') 
{ 
// load css , js for this specific module 
} 
} 
} 
+0

如何使用'headLink'等,因爲這些需要在'view'上調用。即:'$ this-> bootstrap('view'); $ view = $ this-> getResource('view'); $ view-> headLink() - > appendStylesheet(''); () - > appendFile('');' – Ken 2012-04-01 03:28:03

+1

$ this - > _ layout-> getView(); $ this - > _ layout是Zend_Layout的實例,可以從父類 – 2012-04-01 03:37:26

+0

中獲得我想我已經開始了 - 我可以去Zend/Layout/Controller/Plugin/Layout.php查看它有什麼方法。非常感謝。 – Ken 2012-04-01 03:41:26

1

自舉所有模塊。

我可以建議從bootstrap註冊前端控制器插件,並在preDispatch()上執行您的條件魔術。

+0

謝謝,我會弄清楚如何做到這一點。 – Ken 2012-04-01 01:53:12

0

,如果您使用的是佈局,更簡單的方法是添加類似以下內容到你的頁面佈局的頂部一個特定的模塊:

$this->headLink()->appendStylesheet('/styles/admin/styles_admin.css'); 
$this->headScript()->appendFile('/scripts/admin/scripts_admin.js');