コハナの2パスビュー

Kohanaでは、通常Template_Controllerクラスを使用します。 非常に便利-1つのレイアウトで、コンテンツを変更するだけです。 しかし、1ページにCSSまたはJSファイルを含める必要がある場合はどうでしょうか。 js-fileでは問題ありません。ページの中央で接続できます(しかし、それは何となくいです)が、cssはどうですか?! -それは無効です。 レイアウト全体への接続も消極的です。 コントローラーではなく、たとえば次のようなテンプレートで接続したい:

Copy Source | Copy HTML <?php head::addCSS( 'main' ) ?>



  1. Copy Source | Copy HTML <?php head::addCSS( 'main' ) ?>





ファイルがドキュメントのヘッドに正しく接続されるようにします。 ここには新しいものは何もありません。 symfonyフレームワークでは、これは最初のバージョンからすでに実装されています。 そして、すぐに投げられるhtmlを処理する他の方法はありえないのは当然です。 メカニズムは非常にシンプルで、Kohanaから完全に準備されたドキュメントを取得し、そこに必要な行を追加します。 フックでこれを行うことができますが、コントローラーのオーバーライドで行うことにしました。

head.phpヘルパーをapplication / helpersフォルダーに追加します

Copy Source | Copy HTML



  1. <?php
  2. / * <br/> *ヘルパーは挿入されたcssおよびjsファイルを蓄積します <br/> *そして最後にレイアウトにそれらを挿入します <br/> * /
  3. / ** <br/> *スタイルファイルとJavaScriptファイルを挿入 <br/> * <br/> * @author Valera Sizov <br/> * /
  4. クラス
  5. {
  6. static $ styleFiles = array ();
  7. static $ jsFiles = array ();
  8. 静的パブリック関数 addingFiles( $レイアウト
  9. {
  10. $ css = array_merge(Kohana :: config( 'style.files' )、self :: $ styleFiles );
  11. $ js = array_merge(Kohana :: config( 'js.files' )、self :: $ jsFiles );
  12. $ out = '' ;
  13. foreach$ css as $ file
  14. {
  15. $ out 。= '<link rel = "stylesheet" type = "text / css" href = "/ static / css /'。$ file'.css">'"\ n" ;
  16. }
  17. foreach$ js as $ file
  18. {
  19. $ out 。= '<script src = "/ static / js /'。$ file'.js" type = "text / javascript"> </ script>'"\ n" ;
  20. }
  21. return str_replace( '</ head>''$ out。 "\ n"。</ head>'$ layout );
  22. }
  23. 静的パブリック関数 addCss( $ css
  24. {
  25. if (is_array( $ css )){
  26. self :: $ styleFiles = array_merge(self :: $ styleFiles$ css );
  27. } else {
  28. self :: $ styleFiles = array_merge(self :: $ styleFiles配列$ css ));
  29. }
  30. }
  31. 静的パブリック関数 addJs( $ js
  32. {
  33. if (is_array( $ js )){
  34. self :: $ jsFiles = array_merge(self :: $ jsFiles$ js );
  35. } else {
  36. self :: $ jsFiles = array_merge(self :: $ jsFiles配列$ js ));
  37. }
  38. }
  39. 静的パブリック関数 removeCss()
  40. {
  41. Kohana :: config_set( 'style.files'array ());
  42. }
  43. 静的パブリック関数 removeJs()
  44. {
  45. Kohana :: config_set( 'js.files'array ());
  46. }
  47. 静的パブリック関数 addOnlyCss( $ css
  48. {
  49. self :: removeCss();
  50. self :: addCss( $ css );
  51. }
  52. 静的パブリック関数 addOnlyJs( $ js
  53. {
  54. self :: removeJs();
  55. self :: addJs( $ js );
  56. }
  57. }
  58. ?>


コントローラーが継承するアプリケーション/ライブラリ/ BaseController.phpコントローラーを作成します。

Copy Source | Copy HTML



  1. <?php
  2. 抽象クラス BaseController Template_Controllerを拡張します {
  3. public $ template = 'frontend / layout' ;
  4. パブリック関数 _render()
  5. {
  6. if$ this-> auto_render == TRUE)
  7. {
  8. //クラスが破棄されたときにテンプレートをレンダリングします
  9. echo head :: addingFiles((string) $ this-> template);
  10. // $ this-> template-> render(TRUE);
  11. }
  12. }
  13. }
  14. ?>


そして今、2つの設定アプリケーション/ config / style.phpを作成します:

Copy Source | Copy HTML



  1. <?php
  2. / *デフォルトでメインテンプレートに添付されるjavascriptファイルの列挙 <br/> その後、それらを再定義または追加できます* /
  3. $ config [ 'files' ] = array ();
  4. ?>


2番目のアプリケーション/ config / js.php:

Copy Source | Copy HTML



  1. <?php
  2. / *デフォルトでメインテンプレートに添付されるjavascriptファイルの列挙 <br/> その後、それらを再定義または追加できます* /
  3. $ config [ 'files' ] = array ();
  4. ?>


以上です。 もちろん、これをすべてモジュールの形で配置することもできます。そのため、プロジェクト間で転送する方が便利でしょう。 しかし、誰でも自分でこれを行う必要があります。

ここで、設定で接続する必要があるデフォルトファイルを規定します。 そして、必要に応じて、テンプレートに次のように記述します。

Copy Source | Copy HTML



  1. <?php head :: addCss( 'form_contacts'?>


ヘルパーには一連のメソッドがあります。

重複をチェックする方向にもう少し追加する予定です。

私のブログ



All Articles