【问题标题】:Bootstrapping module specific styles/scripts in Zend FrameworkZend 框架中引导模块特定的样式/脚本
【发布时间】:2012-04-15 05:13:54
【问题描述】:

我正在尝试为我的应用程序中的特定模块加载特定样式/脚本资源。

这是我的应用程序结构:

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

我遇到的问题是:我通过headLink()headScript/application/modules/admin/Bootstrap.php 中加载的样式和脚本也被加载到我的控制器/动作中admin 模块。这是我的Bootstrap.php's

/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');
}

我可以看到它是如何或为什么这样做的:因为我从主引导程序(?)获得视图。我的问题是,如何加载特定于模块的样式表和/或脚本文件?

如果这是一个重复的问题,我深表歉意,我搜索了问题标题的各种措辞,但没有找到任何结论。

谢谢, 肯

【问题讨论】:

    标签: php javascript css zend-framework module


    【解决方案1】:

    如果您正在使用布局,更简单的方法是将以下内容添加到特定模块的布局页面顶部:

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

    【讨论】:

      【解决方案2】:

      在引导时无法确定模块的名称。只有在 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
      }
      }
      }
      

      【讨论】:

      • 如何使用像这样使用headLink 等,因为这些需要在view 上调用。即:$this->bootstrap('view'); $view = $this->getResource('view'); $view->headLink()->appendStylesheet(''); $view->headScript()->appendFile('');
      • $this->_layout->getView(); $this->_layout 是父类中 Zend_Layout 的实例
      • 我想我开始明白了——我可以去 Zend/Layout/Controller/Plugin/Layout.php 看看它有什么方法。非常感谢。
      • 我不推荐扩展布局插件,而是自己创建和注册。
      【解决方案3】:

      针对每个请求执行的所有模块的引导程序。

      我可以建议从引导程序注册前端控制器插件,并在 preDispatch() 上做你的条件魔法。

      【讨论】:

      • 谢谢,我会弄清楚如何做到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      相关资源
      最近更新 更多