3

私はKohana 3を使用しています。これはテンプレートコントローラーです。現在、メインのサイト テンプレート コントローラーは次のようになっています。

<?php defined('SYSPATH') or die('No direct script access.');

abstract class Controller_SiteTemplate extends Controller_Template
{
    public function before()
    {
        parent::before();

        // Initialize default template variables
        $this->template->styles           = Kohana::config('site.styles');
        $this->template->scripts          = Kohana::config('site.scripts');

        $this->template->title            = '';
        $this->template->content          = '';
    }
}

そして、テンプレート ビューで次のようにします。

<?php # Styles
foreach($styles as $file => $media) 
    echo HTML::style($file, array('media' => $media)).PHP_EOL ?>

<?php # Scripts
foreach($scripts as $file) 
    echo HTML::script($file).PHP_EOL ?>

これは問題なく動作します。問題は、コントローラーにスタイル ファイルとスクリプト ファイルを追加する必要があることです。また、新しいスタイルシートや新しいスクリプト ファイルを追加するためだけにコントローラーをいじる必要があるため、私以外の誰かがビューを作成すると面倒になります。どうすればこれをより良い方法で行うことができますか?

明確にするために、私が疑問に思っているのは、ページ固有のスタイルシートとスクリプトを処理する方法です。デフォルトおよびサイト全体のものは、構成ファイルから取得するか、テンプレート ビューに直接配置するだけで問題ありません。私の問題は、特定のページにカスタムのものを適切な方法で追加する方法です。

4

4 に答える 4

1

Controller_Template は実際には、定期的にロードされるスタイルと JavaScriptのロジックを配置する場所です。そのため、Controller_Template と呼ばれています。

Controller_Template を拡張しているコントローラーを介してそれらを追加/編集することになっています。最終的に、Kohana を使用するすべての開発者は、まずその仕組みを理解する必要があります。

インライン スクリプト/スタイルに関しては、それらをビュー ファイルに入れるだけで、インラインになりますよね?

于 2010-05-14T21:08:01.963 に答える
0
    parent::before();

    // Initialize default template variables
    $this->template->styles           = Kohana::config('site.styles');
    $this->template->scripts          = Kohana::config('site.scripts');

    $this->template->title            = '';
    $this->template->content          = '';

    /* make your view template available to all your other views so easily you could
       access template variable
    */
    View::bind_global('template', $this->template);

特定のビューでは、このようなものを使用します

   $template->scripts[] = 'js/example.js';

最後にメインビュー(テンプレートビュー)に、さまざまなビューから収集されたjsの配列が表示されます

  <?php
   foreach($template->scripts as $file) { echo Html::script($file), "\n"; }
  ?>

このアプローチを使用するには、使用するすべてのビューでrenderメソッドを呼び出し(テンプレートビュースクリプトの上でこれを行う)、次に次のようなレンダリングされたコンテンツで変数を挿入する必要があります。

$top = View::factory('elements/top_nav')->render();
$content = $content->render();
$footer = View::factory('elements/footer')->render();

<div id="content"> 
        <?php echo $content;?>
    </div>
    <div id="meniu"><?php echo $top;?></div> you could add inline scripts as well, just add a $template->inline_scripts populate it with $template->inline_scripts = array('<script type="text/javascript">Cufon.replace(\'#meniu ul.topnav li a\');</script>'); and show it on template view script with a foreach($template->inline_scripts as $inline_script) { echo $inline_script."\n";};

`

于 2010-10-01T20:31:00.773 に答える
0

Why dont you just put them in the view? - then if someone else is working on the views, they can see what stylesheets are in use and have control over them without touching the controllers etc?

eg:

<?php echo HTML::style("/css/style.css", array('media' => 'screen')).PHP_EOL ?>

Ian

于 2010-05-14T23:37:08.427 に答える
0

これを行う 1 つの方法は、CSS およびスクリプト ファイルのリストを格納するヘルパーを作成することです。このヘルパーはシングルトンとして機能します。次に、適切なタイミングで、これらのリンクをテンプレート内にダンプできます。

すなわち:

ヘルパー コード:

<?php defined('SYSPATH') or die('No direct script access.');

class javascript {
    private static $files = array();

    public static function add($file)
    {
        self::$files[] = $file;
    }

    public static function get()
    {
        return self::$files;
    }
}

コントローラーコード:

class Controller_Example extends Controller_Template {

    public function before()
    {
        ....
        javascript::add('js/jquery.js');
        javascript::add('js/jquery-ui.js');
        ....
    }
}

テンプレート コード:

<html>
    <head>
        <?php foreach(javascript::get() as $javascript ?>
        <script type="text/javascript" src="<?= $javascript ?>"></script> 
        <?php endforeach; ?>
    </head>
...
</html>

考慮すべきいくつかの改善点:

  • CSS バージョンのテンプレートとして機能する基本クラスを作成します。
  • FBJS に必要な、ボディに含まれるスクリプト ファイルを追加するメソッドを追加します。

PS: これは、Kohana Project のリーダーの 1 人が IRC で一度推奨した戦略です。

于 2010-05-14T20:46:44.360 に答える