2015-08-17 7 views
14

Ich verwende Yii2 und habe über theming und theme inheritance gelesen; jedoch haben einige Fragen:Ausarbeiten, wie Yii2 Themenressourcen bei der Verwendung von Fallbacks findet

Betrachten Sie das folgende Beispiel:

'view' => [ 
    'theme' => [ 
     'pathMap' => [ 
      '@app/views' => [ 
       '@app/themes/current', 
       '@app/themes/default', 
      ], 
     ], 
     'baseUrl' => '@web/themes/current', 
     'basePath' => '@webroot/themes/current', 
    ], 
], 

Nun stellen wir das Thema Datei foo fordern; wie ich es dies zunächst verstehen, in der folgenden Reihenfolge betrachtet werden:

  • @app/themes/current/foo.php
  • @app/themes/default/foo.php
  • @app/views/foo.php

Jetzt foo.php vorstellen, in dem @app/themes/current/ Thema nicht gefunden wird, so dass es würde die Datei verwenden, die in @app/themes/default/ gefunden wird.

Nun, unter Berücksichtigung der baseUrl und basePath Einstellungen bin ich ein wenig verwirrt, wie diese in diesen Situationen verwendet werden.

Nun stellen Sie sich vor foo.php verweist auf eine Bilddatei in der Datei, würde dies nicht versuchen, @web/themes/current/images/myImage.jpg statt @web/themes/default/images/myImage.jpg zu finden?

Antwort

4

In diesem Fall ist basePath wertlos. Weil basePath nur angewendet wird, wenn pathMap leer ist.
basePath ist kein Fallback, es ist eine Abkürzung von pathMap, schnell zu verwenden, wenn Sie nur ein Thema haben.

'pathMap' => [ 
    '@app/views' => [ 
     '@app/themes/current/views', 
    ], 
], 

Entspricht:

'basePath' => '@app/themes/current', 

(Yü versteht diesen Ordner @app/themes/current/views existieren)

baseUrl: Es wird zurückgegeben, wenn Sie $this->theme->getBaseUrl() in View-Datei aufrufen. Weniger Wert mit Multi-Thema.

Über Fallback für statische Dateien. Theming Fallback ist nicht für diesen Zweck ausgelegt.

+0

Danke für die Info. Ich brauche kein * Fallback * für die Ressourcen wirklich, aber vorzugsweise eine Möglichkeit, die Ressource aus dem gleichen Themen Web zugänglich Verzeichnis zu nehmen, dass es die Theme-View-Datei im Themes '@ app' Theme-Verzeichnis gefunden. – Brett

+0

Sie können die 'applyTo()' -Funktion beziehen. Aber es funktioniert mit Dateipfad: http://www.yiiframework.com/doc-2.0/yii-base-theme.html # applyTo() - detail –

+0

Dann würden Sie nicht Theme Fallback bekommen? – Brett

2

Punkt Ihre Links innerhalb Datei wie dieser exmaple von docs:

$theme = $this->theme; 

// returns: $theme->baseUrl . '/img/logo.gif' 
$url = $theme->getUrl('img/logo.gif'); 

// returns: $theme->basePath . '/img/logo.gif' 
$file = $theme->getPath('img/logo.gif'); 

Es wird Datei aus aktuellem Themenverzeichnis erhalten.

+0

Danke, aber ich wusste schon, wie das geht. Das erklärt nicht wirklich, was meine Frage verlangte. – Brett

+0

Wenn foo.php im "default" -Thema gefunden wurde, wird $ this-> theme-> baseUrl berücksichtigt und -> basePath gehört zum 'default' -Thema und es würde keine anderen Designs suchen, um neue base * -Werte einzurichten. @Brett – SiZE

Verwandte Themen