7

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

3 Answers 3

4

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
}
}
}
Sign up to request clarification or add additional context in comments.

4 Comments

How would use go about using headLink etc like this since those need to be called on the view. i.e: $this->bootstrap('view'); $view = $this->getResource('view'); $view->headLink()->appendStylesheet(''); $view->headScript()->appendFile('');
$this->_layout->getView(); $this->_layout is instance of Zend_Layout available from parent class
I think I'm starting to get it - I could just go to Zend/Layout/Controller/Plugin/Layout.php to see what methods it has. Thank you much.
i do not recommend extending layout plugin, rather create and register your own.
1

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().

1 Comment

Thanks, I will figure out how to do this.
0

if you are using a layout, an easier way is to add something like the following to the top of your layout page for a particular module:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.