2017-10-26 7 views
0

Ich würde für meine Anwendung gerne automatisch Vorlage ändern so habe ich diese Struktur Frontend/web/Themen/myTheme
folgende http://www.yiiframework.com/doc-2.0/guide-output-theming.html ich diesen Code in Frontend hinzugefügt/config/main. phpYii2 erweiterte Änderung Ansichten Standardpfad (Theming)

'components' => [ 
     'view' => [ 
      'theme' => [ 
       'basePath' => '@app/themes/myTheme', 
       'baseUrl' => '@web/themes/myTheme', 
       'pathMap' => [ 
        '@app/views' => '@app/themes/myTheme', 
       ], 
      ], 
     ], 
    ], 

jedoch hielt ich den Fehler bekommen, dass „/var/www/html/myProject/app/frontend/views/site/index.php“ die Ansicht Datei existiert nicht ???

ich versuchte auch in der Steuerung basierend auf How to change default view path in Yii2?

public function getViewPath() 
{ 
    return Yii::getAlias('@web/themes/myTheme/site'); 
} 

so meine Frage diese Funktion zu setzen ist: 1. Wie kann ich die Ansichten Standardpfad ändern? 2. wie kann ich das automatisch machen, da ich die common/config/main.php-einstellungen während einer sitzung nicht ändern kann?

Standortsteuerung

class SiteController extends Controller 
{ 
    public function behaviors() 
    { 
     return [ 
      'access' => [ 
       'class' => AccessControl::className(), 
       'rules' => [ 
        [ 
         'actions' => ['index'], 
         'allow' => true, 
         'roles' => ['?'], 
        ], 
        [ 
         'actions' => ['index'], 
         'allow' => true, 
         'roles' => ['@'], 
        ], 
       ], 
      ], 
     ]; 
    } 
    public function actions() 
    { 
     return [ 
      'error' => [ 
       'class' => 'yii\web\ErrorAction', 
      ], 
      'captcha' => [ 
       'class' => 'yii\captcha\CaptchaAction', 
       'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, 
      ], 
     ]; 
    } 

    /** 
    * Displays homepage. 
    * 
    * @return mixed 
    */ 
    public function actionIndex() 
    { 
     $searchModel = new ProductSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     return $this->render('index', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 
    } 
} 
+0

Können Sie mir Ihren Controller zeigen? – hesselek

+0

einfache Steuerung – leila

Antwort

1

Ich glaube, Sie die falschen file.Don't configure Themen im gemeinsamen/config konfigurieren starten: in Frontend/config/main.php

'components' => [ 
     'view' => [ 
      'theme' => [ 
       'pathMap' => [ 
        '@frontend/views'=>'@frontend/themes/myTheme', 
       ], 
      ], 
     ], 
    ], 

wenn Sie das Backend dann in die backend/config/main.php

konfigurieren
'components' => [ 
      'view' => [ 
       'theme' => [ 
        'pathMap' => [ 
         '@backend/views'=>'@backend/themes/myTheme', 
        ], 
       ], 
      ], 
     ], 

Der gemeinsamen Ordner hat die Dateien enthalten, die sowohl von Frontend und Backend benötigt werden. Hoffe, das hilft.

+0

ich tatsächlich Frontend nicht üblich verwendet – leila

0

Erste Frage:

Ich denke, als Sie einen häufigen Fehler in yii haben, wenn erweitert App verwendet: das Alias ​​@app Referenzen Stammverzeichnis Frontend, Backend oder gemeinsamen je nachdem, wo Sie Zugriff von View documentation here. Sie würden die von ovicko vorgeschlagene Lösung verwenden.

Zweite Frage:

Sie können das Thema Konfiguration dynamisch in der Steuerung durch Ansichtsobjekt ändern:

$this->view->theme->pathMap =['@app/views' => '@app/themes/myTheme/',]; 

EDIT Nach Documentation:

Theming ist eine Möglichkeit, Ersetzen Sie eine Reihe von Ansichten durch eine andere, ohne den ursprünglichen Darstellungscode zu berühren .

Was bedeutet, dass die ursprüngliche Ansicht Datei muss existieren und Thematisierung es einfach in ersetzen beim Rendern. Sie müssen also eine Datei in/var/www/html/myProject/app/frontend/views/site/index erstellen.php (eine leere Datei ist gültig) um thematisch zu arbeiten. Das klingt ziemlich lächerlich, ich weiß, aber es funktioniert.

Aber ich denke, dass ist viel besser und einfacher ist die Verwendung von differents layouts wieder dinamically das Layout in Ihrem Controller ändern:

$this->layout = 'route/yourlayout'; 
+0

Ich hatte ein Problem mit Apps mit gii, um Dateien zu generieren, so dass ich lieber die Ordnernamen stattdessen verwenden. – ovicko

+0

Ja, ich auch. Es ist viel besser und weniger verwirrend, den Ordnernamen zu verwenden. Besonders wenn Sie ein Projekt mit vier oder mehr Routenordnern haben. – hesselek

Verwandte Themen