2012-04-01 13 views
7

Próbuję załadować określone style/zasoby skryptu dla konkretnego modułu w mojej aplikacji.Specyficzne style/skrypty bootstrap w Zend Framework

Oto moja konstrukcja aplikacja:

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

Problem mam to: style i skrypty wczytuję poprzez headLink() i headScript w /application/modules/admin/Bootstrap.php są również ładowane w moim kontrolera/działania, które są nie w module admin. Oto moje 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'); 
} 

widzę, jak, a może dlatego, że to robi: bo jestem coraz pogląd z głównego bootrap (?). Moje pytanie brzmi: w jaki sposób można załadować moduły arkuszy stylów i/lub skryptów?

Przepraszam, jeśli jest to duplikat pytania, szukałem różnych sformułowań w tytule pytania i nie znalazłem nic rozstrzygającego.

Dzięki Ken

Odpowiedz

4

Nie można ustalić nazwy modułu w czasie ładowania początkowego. Dopiero po routeShutdown dowiesz się o nazwie modułu. Jeśli używasz układu otwórz application.ini

resources.layout.pluginClass = "My_Layout_Controller_Plugin_Layout" 

wewnątrz

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

W jaki sposób byłoby użyć metody 'headLink' itp., Ponieważ te muszą być wywołane w widoku' view'. tj .: '$ this-> bootstrap ('widok'); $ view = $ this-> getResource ("widok"); $ view-> headLink() -> appendStylesheet (''); $ view-> headScript() -> appendFile (''); ' – Ken

+1

$ this -> _ layout-> getView(); $ this -> _ layout jest instancją Zend_Layout dostępną z klasy nadrzędnej –

+0

Myślę, że zaczynam ją zdobywać - mógłbym po prostu przejść do Zend/Layout/Controller/Plugin/Layout.php, żeby zobaczyć, jakie to ma metody. Dziękuję bardzo. – Ken

1

siłach dla wszystkich modułów wykonywane na każde żądanie.

Mogę zasugerować rejestrację wtyczki kontrolera frontowego od bootstrap i wykonać magię warunkową na preDispatch().

+0

Dzięki, wymyślę, jak to zrobić. – Ken

0

jeśli używasz układ, łatwiejszy sposób jest dodać coś takiego do góry strony układ dla konkretny moduł:

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