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()等等。在线文档几乎没有提到在 Renderer/View 类中自定义处理程序。

4

2 回答 2

2

这可以在不继承类的情况下完成lithium\template\view\Renderer。在media.php引导程序中,使用'handlers'with 键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 回答
0

这可以使用帮助程序解决。创建自定义帮助程序 下的文档应该足够了。

于 2013-06-13T10:17:08.783 回答