2012-04-01 8 views
7

Sto provando a caricare specifici stili/risorse di script per un modulo specifico all'interno della mia applicazione.Bootstrapping di stili/script specifici di moduli in Zend Framework

Qui è la mia struttura dell'applicazione:

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

Il problema che sto avendo è: gli stili e script sto di carico per i headLink() e headScript in /application/modules/admin/Bootstrap.php sono anche essere caricati in mio controller/azioni che sono non nel modulo admin. Qui sono i miei 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'); 
} 

posso vedere come o forse perché si sta facendo: perché sto ricevendo la vista dal caricatore principale (?). La mia domanda è: come si caricano fogli di stile specifici e/o file di script?

Mi scuso se questa è una domanda doppia, ho cercato varie diciture del titolo della domanda e non ho trovato nulla di conclusivo.

Grazie, Ken

risposta

4

Non è possibile determinare il nome del modulo in fase di bootstrap. Solo dopo routeShutdown verrai a sapere del nome del modulo. Se si utilizza il layout quindi aprire Application.ini

resources.layout.pluginClass = "My_Layout_Controller_Plugin_Layout" 

all'interno

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

Come utilizzare l'uso di 'headLink' ecc in questo modo, poiché questi devono essere richiamati su' view'. vale a dire: $ this-> bootstrap ('view'); $ view = $ this-> getResource ('view'); $ view-> headLink() -> appendStylesheet (''); $ view-> headScript() -> appendFile (''); ' – Ken

+1

$ this -> _ layout-> getView(); $ this -> _ layout è l'istanza di Zend_Layout disponibile dalla classe genitore –

+0

Penso che sto iniziando a prenderlo - potrei semplicemente andare su Zend/Layout/Controller/Plugin/Layout.php per vedere quali metodi ha. Grazie mille. – Ken

1

Bootstraps per tutti i moduli che funzionano su ogni richiesta.

Posso suggerire di registrare il plug-in del controller anteriore da bootstrap e di eseguire la magia condizionale su preDispatch().

+0

Grazie, vedrò come farlo. – Ken

0

se si utilizza un layout, un modo più semplice è quello di aggiungere qualcosa di simile a quanto segue alla parte superiore della pagina layout per un particolare modulo:

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