2012-12-12 12 views
5

Ich versuche, die Yii Bootstrap-Erweiterung nur im Admin-Modul zu laden, aber es funktioniert nicht. Ich gehe davon aus, dass ich es vorher laden oder irgendwie initiieren muss ... Danke!Laden Yii Bootstrap in einem Modul nur

class AdminModule extends CWebModule 
    { 
     public function init() 
     { 
      // import the module-level models and components 
      $this->setImport(array(
       'admin.models.*', 
       'admin.components.*', 
       'ext.bootstrap.components.Bootstrap', 
      )); 
     } 

     public function beforeControllerAction($controller, $action) 
     { 
      if(parent::beforeControllerAction($controller, $action)) 
      { 
         $this->layout = 'admin';     
         return true; 
      } 
      else 
       return false; 
     } 
    } 
+1

, auf welche Weise es ist funktioniert nicht? –

+0

es lädt nicht die css etc ... – keeg

Antwort

10

Es gibt 4 verschiedene Möglichkeiten, dies zu tun:

  1. Fügen Sie die Konfiguration der Konfiguration des app (protected/config/main.php):

    'modules'=>array(
        'admin'=>array(
         'preload'=>array('bootstrap'), 
         'components'=>array(
          'bootstrap'=>array(
           'class'=>'ext.bootstrap.components.Bootstrap' 
         ) 
        ), 
    // ... other modules ... 
    )  
    
  2. Laden Sie es in die init:

    vor
  3. Preload in init eine andere Art und Weise:

    public function init() 
    { 
        // import the module-level models and components 
        $this->setImport(array(
         'admin.models.*', 
         'admin.components.*', 
        )); 
    
        $this->configure(array(
          'components'=>array(
           'bootstrap'=>array(
            'class'=>'ext.bootstrap.components.Bootstrap' 
           ) 
          ) 
        )); 
        $this->getComponent('bootstrap'); 
    } 
    
  4. Preload in init noch eine weitere Möglichkeit:

    public function init() 
    { 
        // import the module-level models and components 
        $this->setImport(array(
         'admin.models.*', 
         'admin.components.*', 
        )); 
    
        $this->configure(array(
          'preload'=>array('bootstrap'), 
          'components'=>array(
           'bootstrap'=>array(
            'class'=>'ext.bootstrap.components.Bootstrap' 
           ) 
          ) 
        )); 
        $this->preloadComponents(); 
    } 
    
+1

Vielen Dank! Genau das habe ich gebraucht! – keeg

+0

Ich bekomme immer noch Fehler Eigenschaft "CWebApplication.bootstrap" ist nicht definiert. Wenn Sie eines Ihrer Beispiele verwenden :(Weil ich Bootstrap-Dateien in Modulerweiterungen speichere? – dzona

+0

@dzona, können Sie dies tun, selbst wenn Sie Bootstrap innerhalb eines _extensions_-Verzeichnisses eines Moduls haben (ich habe es gerade versucht). Sie müssen es geben mehr Details über den Code, den Sie haben (und die Zeile, die diesen Fehler erzeugt), und die Konfiguration Ihrer Verzeichnisse, und auch die Version Ihres Bootstraps, damit ich das Problem genau aufzeigen kann hat korrekt auf die Erweiterung zugegriffen (korrektes Alias ​​verwendet - 'Modulname.extensions.bootstrap.components.Bootstrap'), wo immer Sie versuchen, die Klasse der Erweiterung zu initialisieren. –

1

wirklich funktionierenden Code: in Ihrem Modul init-Funktion einfügen nur die folgende Code:

Yii::setPathOfAlias('bootstrap', Yii::getPathOfAlias('ext.bootstrap')); 
Yii::app()->setComponent('bootstrap', array('class'=>'bootstrap.components.Bootstrap')); 
2

Wenn Sie die folgenden in der Hauptkonfigurations (protected/config/main.php), zB als konfigurieren:

'admin' => array(
     'preload'=>array('bootstrap'), 
     'components'=>array(
      'bootstrap' => array(
       'class' => 'bootstrap.components.Bootstrap', 
       'responsiveCss' => true, 
      ), 
     ), 
) 

Dann können Sie Komponente als

$bootstrap = $this->getModule()->bootstrap; // with $this is a current controller. 

zu definieren Verwendung Diese Modulkomponente zu Hauptkomponente, müssen Sie Komponente in init() der Modulklasse setzen:

// Set main component `bootstrap` instead of CController->getModule()->bootstrap 
app()->setComponent('bootstrap', $this->bootstrap); 
0
protected/config/main.php 

'modules'=>array(
    'admin'=>array(
     'preload'=>array('bootstrap'), 
     'components'=>array(
      'bootstrap'=>array(
       'class'=>'ext.bootstrap.components.Bootstrap' 
     ) 
    ), 

)  

es Preload im init:

public function init() 
{ 
    // import the module-level models and components 
    $this->setImport(array(
     'admin.models.*', 
     'admin.components.*', 
     // 'ext.bootstrap.components.Bootstrap', // this will go to app config for components 
    )); 
    Yii::app()->getComponent('bootstrap');// this does the loading 
} 

Wenn es nicht funktioniert, dann fügen Sie Ihre URL in diese Datei, die Sie bilden, werden unter Verwendung von Bootstrap

<link rel="stylesheet" type="text/css" href="/pojects/fcorginal/assets/b2e88ad5/bootstrap/css/bootstrap.min.css" />