Das Beispiel in diesem Artikel beschreibt die Verwendung des Yii2-Themes (Theme). Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Werfen wir zunächst einen Blick auf die wichtigsten Konfigurationsmethoden:
'components' => [ 'view' => [ 'theme' => [ 'pathMap' => ['@app/views' => '@app/themes/basic'], 'baseUrl' => '@web/themes/basic', ], ], ],
Die Theme-Funktion in Yii wird hauptsächlich von der yiibaseTheme-Klasse implementiert. Ihre Hauptidee besteht darin, zunächst ein Eins-zu-Eins-entsprechendes String-Mapping-Array zu definieren und dann die gegebene Zeichenfolge entsprechend der Mapping-Beziehung im Array zuzuordnen .
hat die folgende Zuordnung:
$pathMap=[ '@app/a' => '@app/aaa', '@app/b' => '@app/bbb', '@app/c' => [ '@app/ccc/xxx', '@app/ccc/yyy', ], ];
Für die Zeichenfolge @app/a/site/index.php ist aus der obigen Zuordnungsbeziehung ersichtlich, dass @app/a durch @app/aaa ersetzt wird und das generierte Ergebnis @app/aaa ist /site/index.php.
Bitte beachten Sie jedoch, dass dies noch nicht das endgültige Ergebnis ist. Da Yii mit Dateipfaden arbeitet, wird dieser Pfad zurückgegeben, wenn die Datei @app/aaa/site/index.php existiert, andernfalls wird der ursprüngliche Pfad zurückgegeben: @app/a/site/index.php
Wenn eine Zeichenfolge @app/c/site/index.php vorhanden ist und die obige Zuordnung weiß, dass @app/c zwei Ersetzungen entspricht, ersetzt Yii diese nacheinander von Anfang an und generiert zunächst @app/ccc /xxx/site /index.php, wenn diese Datei vorhanden ist, geben Sie diesen Pfad zurück, andernfalls fahren Sie mit dem Ersetzen fort.
Wenn nicht alle Ersetzungsergebnisse entsprechende Dateien haben, wird der ursprüngliche Pfad zurückgegeben.
Das gleichzeitige Schreiben mehrerer Ersetzungszielwerte hat den Vorteil, dass eine Themenvererbung realisiert wird.
Es gibt jetzt eine Reihe von Standardthemen. Wenn Sie jetzt ein schwarzes Thema hinzufügen möchten, gibt es zwei Möglichkeiten, dies zu erreichen.
Erste Methode: Kopieren Sie alle Ansichten standardmäßig in das leere Verzeichnis.
Zweite Option: Kopieren Sie nur eine Layoutdatei in das leere Verzeichnis und ändern Sie dann die Gesamtfarbe in der Layoutdatei. Stellen Sie es dann auf
ein$pathMap=[ '@app/c' => [ '@app/ccc/blank', '@app/ccc/default', ], ];
Sehen Sie sich die Vorteile an? Wenn die Datei nicht im leeren Zustand gefunden wird, wird sie standardmäßig durchsucht. Das heißt, die leeren Dateien überschreiben die standardmäßig vorhandenen Dateien und erkennen so die Vererbung des Themas.
Attribute im Theme:
$pathMap: Dies wird verwendet, um die Ersetzungszuordnungsbeziehung festzulegen.
'pathMap' =>[ '@app/views' => [ '@app/themes/blank', '@app/themes/default', ], '@app/modules' => '@app/themes/default/modules', '@app/widgets' => '@app/themes/default/widgets' ],
Diese drei wenden Themen jeweils auf Ansichten, Module und Widgets an.
$baseUrl: Dies wird verwendet, um die URL der Ressource festzulegen, auf die zugegriffen werden soll (ohne „/“ am Ende)
$basePath: Legen Sie das Dateiverzeichnis fest, in dem sich die Ressource befindet
Methoden im Thema:
öffentliche Funktion init()
public function init() { parent::init(); //如果没有设置$pathMap映射,则使用$basePath, if (empty($this->pathMap)) { /* * 如果$basePath也没有设置,则出异常。 * 也就是说 $pathMap和$basePath至少要设置一个,如果两个都设置了,优先使用$pathMap */ if (($basePath = $this->getBasePath()) === null) { throw new InvalidConfigException('The "basePath" property must be set.'); } //设置当前模块的路径和$basePath的映射关系 $this->pathMap = [Yii::$app->getBasePath() => [$basePath]]; } }
öffentliche Funktion applyTo($path)
//这个就是按照 $pathMap中的定义的映射关系来对$path进行替换字符串的 public function applyTo($path) { //对路径中的"/"、“\”进行统一替换 $path = FileHelper::normalizePath($path); foreach ($this->pathMap as $from => $tos) { //映射数组中的来源(旧值) $from = FileHelper::normalizePath(Yii::getAlias($from)) . DIRECTORY_SEPARATOR; //如果在$path中有可替换的旧值 if (strpos($path, $from) === 0) { $n = strlen($from); //对目标值循环, foreach ((array) $tos as $to) { $to = FileHelper::normalizePath(Yii::getAlias($to)) . DIRECTORY_SEPARATOR; //把$path中的$from替换为$to $file = $to . substr($path, $n); //如果是文件,直接返回 if (is_file($file)) { return $file; } } } } return $path; }
Leser, die an mehr Yii-bezogenen Inhalten interessiert sind, können sich die speziellen Themen dieser Website ansehen: „Einführung in das Yii-Framework und Zusammenfassung gängiger Techniken“, „Zusammenfassung des ausgezeichneten PHP-Entwicklungsframeworks“, „Grundlegendes Tutorial für den Einstieg“. mit Smarty-Vorlagen“, „Einführungs-Tutorial zum objektorientierten PHP-Programmierung-Design“, „Zusammenfassung der PHP-String-(String-)Verwendung“, „Einführungs-Tutorial zum PHP-MySQL-Datenbankbetrieb“ und „Zusammenfassung allgemeiner PHP-Datenbankbetriebsfähigkeiten“
Ich hoffe, dass dieser Artikel für jedermann beim PHP-Programmdesign basierend auf dem Yii-Framework hilfreich sein wird.