Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bootstrapping module specific styles/scripts in Zend Framework

I am trying to load specific styles/script resources for a specific module within my application.

Here is my application structure:

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

The problem I'm having is: the styles and scripts I am loading through headLink() and headScript in /application/modules/admin/Bootstrap.php are also being loaded in my controller/actions that are not in the admin module. Here are my 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');
}

I can see how or maybe why it's doing it: because I'm getting the view from the main bootsrap(?). My question is, how does one load module specific stylesheets and/or script files?

I apologize if this is a duplicate question, i searched for various wordings of the title of the question and I didn't find anything conclusive.

Thanks, Ken

like image 997
Ken Avatar asked Apr 01 '12 01:04

Ken


2 Answers

Its not possible to determine name of module at bootstrap time . Only after routeShutdown you will come to know about module name . If you are using layout then open application.ini

resources.layout.pluginClass = "My_Layout_Controller_Plugin_Layout"

inside

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
}
}
}
like image 112
Mr Coder Avatar answered Oct 20 '22 20:10

Mr Coder


Bootstraps for all modules being executed on every request.

I can suggest registering front controller plugin from bootstrap and do your conditional magic on preDispatch().

like image 26
Xerkus Avatar answered Oct 20 '22 21:10

Xerkus