2012-04-01 57 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');