1

ビューによって提供されるレイアウトでコンテンツをレンダリングできるように$this->title()、レイアウト ビューで独自のカスタム ハンドラーを定義しようとしています。$this->scripts()

正確には、ファイルで定義されているビューの一部に新聞の日付を表示したいと考えていdefault.html.phpます。<?= $this->date(); ?>レイアウトでは、次のようなものを使用したいと思います

<?= $this->html->date('Jan 1, 2013', ['inline' => false]); ?>

views/posts/view.html.phpファイルで。このlithium\template\view\Rendererクラスにはハンドラーを作成するためのメソッド (例: Renderer::applyHandler) があるように見えますが、組み込みのハンドラーのように動作させることはできないようです$this->title()

4

2 に答える 2

2

これは、クラスをサブクラス化せずに実行できますlithium\template\view\Renderer。ブートストラップで、with キーをmedia.php使用して、カスタマイズされたハンドラーをレンダラーに渡します。'handlers'Media::type()

    Media::type('html', 'text/html', [
        'view' => 'lithium\template\View',
        'handlers' => ['date' => function($date) use (&$ctx) {
            if (!is_null($date)) {
                $ctx['date'] = $date;
            }
            return $ctx['date'];
        }]
    ]);

次に、$this->date()ビューとレイアウトで使用できるようになります。例:

    //in the default.html.php layout

    echo $this->date(); //value passed from /views/controller/index.html.php

    //in the views/controller/index.html.php

    $this->date(date('Y-m-d'));

補足として、$ctx変数はレンダリング コンテキストにアクセスするために必要です。配列がレンダリング コンテキストとマージさlithium\template\view\Renderer::_init()れる場所のメソッドを参照してください。'handlers'

于 2013-06-13T05:04:57.350 に答える