laravel 5テンプレートのテーマ機能を実現する(続)
前の記事では、Responseマクロを定義することにより、動的にテンプレートファイルのパスを変更してテーマ機能を実現することを紹介しました。laravelはテンプレートのテーマ機能を実現しました。テーマとテーマの間は完全に隔離されるべきで、存在しないのは存在しないので、自動的に別のテーマの中に行って代替のテンプレートを探さないでください。
元々はレスポンスマクロを定義していた方式が実現できましたが、より規範的な方法を使うことにしました。
laravelのView類には方法Viewがあります。addNamespaceはマニュアルの「開発拡張パッケージ」の一節において言及されています。Laravelマニュアルのレイアウトロジックが混乱していると言わざるを得ません。この方法の説明は「ビュー」の章に置くべきです。
laravelレンダリングビューには書き方があります。
便利ではないと思いますが、Viewではデフォルトのnamespaceを設定できないですか?このように一度だけ設定します。
残念ながら、Viewはset Default Namespaceの方法がないので、プロジェクトを作成することにしました。laravelに対して専門的にコアクラスの拡張を行うことにしました。この機能はすでに実現しました。プロジェクトの住所はsrc/Keepey/Laravel/View/で使用方法を確認してください。
はい、laravelテンプレートのテーマ機能の実現については、ここまで検討してきました。お好きなように。
元々はレスポンスマクロを定義していた方式が実現できましたが、より規範的な方法を使うことにしました。
laravelのView類には方法Viewがあります。addNamespaceはマニュアルの「開発拡張パッケージ」の一節において言及されています。Laravelマニュアルのレイアウトロジックが混乱していると言わざるを得ません。この方法の説明は「ビュー」の章に置くべきです。
laravelレンダリングビューには書き方があります。
View::make('namespace::path');
// View::make('default::index.index');
どのようにnamespaceを定義しますか?この方法を通じてです。
View::addNamespace('default',app_path().'/views/default');
聡明な友達はもう感じたかもしれません。この機能はテンプレートのテーマ化を実現するのに役立ちます。
//
View::addNamespace('blue',app_path().'/views/blue');
//
View::addNamespace('red',app_path().'/views/red');
//
View::addNamespace('green',app_path().'/views/green');
コールバック:
// index.index
View::make('green::index.index');
しかし、我々は事前にView:addNamespace方法によってこれらのテーマのパスマップを登録し、レンダリングの際には明示的にnamespaceを指定する必要がある。便利ではないと思いますが、Viewではデフォルトのnamespaceを設定できないですか?このように一度だけ設定します。
// __construct
View::setDefaultNamespace('blue',app_path().'/views/blue');
後:
// View::make('blue::index.index');
View::make('index.index');
さらに、バックグラウンドでテーマを設定し、テーマ名をデータベースに書き込み、フロントでテーマを読み込み設定できます。
// ,Option
$theme = Option::getByKey('theme');
View::setDefaultNamespace($theme,app_path().'/views/'.$theme);
これでバックグラウンドがテーマに切り替わります。残念ながら、Viewはset Default Namespaceの方法がないので、プロジェクトを作成することにしました。laravelに対して専門的にコアクラスの拡張を行うことにしました。この機能はすでに実現しました。プロジェクトの住所はsrc/Keepey/Laravel/View/で使用方法を確認してください。
はい、laravelテンプレートのテーマ機能の実現については、ここまで検討してきました。お好きなように。