2013-06-13 156 views
1

我正在尋找在佈局視圖中定義我自己的自定義處理程序,很像$this->title()$this->scripts(),以便我可以呈現由視圖提供的佈局中的內容。如何定義鋰佈局的自定義處理程序

準確地說,我想在default.html.php文件中定義的部分視圖中顯示報紙版本的日期。在佈局,我想使用<?= $this->date(); ?>然後,在views/posts/view.html.php文件中使用類似

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

。 類看起來有創建處理程序的方法(例如,Renderer::applyHandler),但似乎無法像內置處理程序那樣工作,如$this->title()等。在線文檔幾乎沒有說明定製處理程序的Renderer /查看課程。

回答

2

這可以在沒有繼承類的情況下完成。在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'數組與渲染上下文合併。

0

這是使用helpers 解決的文檔創建自定義幫手應該是足夠的。

+0

我不知道如何幫手完成我在找的東西。在這個例子中,我基本上是在視圖中定義的佈局中顯示一個變量。以'$ this-> html-> style('styles',['inline'=> false])爲例。如果你看一下這個幫助器方法,它將文件名映射到渲染上下文,以便佈局可以用'$ this-> styles()'顯示在視圖中定義的樣式表(不是佈局)。這些處理程序在Renderer類中定義。我想添加自定義處理程序,並且我沒有看到輔助程序類如何完成此操作,而沒有發現一點小問題。 –