2012-04-01 11 views
7

Estoy intentando cargar recursos de guiones/estilos específicos para un módulo específico dentro de mi aplicación.Estilos/guiones específicos del módulo Bootstrapping en Zend Framework

Aquí es mi estructura de la aplicación:

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

El problema que estoy teniendo es: los estilos y scripts Estoy cargando a través headLink() y headScript en /application/modules/admin/Bootstrap.php también se están cargando en mi regulador/acciones que son no en el módulo admin. Aquí están mis 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'); 
} 

puedo ver cómo o tal vez por qué lo está haciendo: porque yo estoy haciendo la vista desde el bootsrap principal (?). Mi pregunta es, ¿cómo carga uno las hojas de estilo y/o los archivos de script específicos del módulo?

Disculpe si esta es una pregunta duplicada, busqué varias redacciones del título de la pregunta y no encontré nada concluyente.

Gracias, Ken

Respuesta

4

No es posible determinar el nombre del módulo en el tiempo de arranque. Solo después de routeShutdown conocerás el nombre del módulo. Si está utilizando el diseño abra application.ini

resources.layout.pluginClass = "My_Layout_Controller_Plugin_Layout" 

dentro

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

Cómo usarlo para usar 'headLink' etc. de esta manera, ya que es necesario invocarlos en' view'. es decir: '$ this-> bootstrap ('view'); $ view = $ this-> getResource ('view'); $ view-> headLink() -> appendStylesheet (''); $ view-> headScript() -> appendFile (''); ' – Ken

+1

$ this -> _ layout-> getView(); $ this -> _ layout es una instancia de Zend_Layout disponible desde la clase padre –

+0

Creo que estoy empezando a obtenerlo - Podría ir a Zend/Layout/Controller/Plugin/Layout.php para ver qué métodos tiene. Muchas gracias – Ken

1

Bootstraps para todos los módulos que se ejecutan en cada petición.

Puedo sugerir registrar el plugin de controlador frontal de bootstrap y hacer tu magia condicional en preDispatch().

+0

Gracias, voy a averiguar cómo hacerlo. – Ken

0

si está utilizando un diseño, una manera más fácil es añadir algo como lo siguiente a la parte superior de la página de diseño para un módulo en particular:

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