2012-05-14 11 views
6

通常、私はZend Frameworkを使用していますが、これは私がリチウムで見逃しているものです。部分。ビューには、もっとも近い「要素」を使用できるレンダリングメソッドがあります。リチウムの部分

これは動作しますが、form.html.phpファイルは/ views/elementsフォルダにある必要があります。別のパスで検索させることは可能ですか?/views/users /と同様に、/views/users/form.html.phpファイルを取得します。

私はrender methodがパスを指定できるオプション引数を受け入れることが分かったので、私は以下を試しました。だから私はこの問題を私のために解決するヘルパーを作った。

namespace app\extensions\helper; 
use lithium\template\TemplateException; 

class Partial extends \lithium\template\Helper 
{ 
public function render($name, $folder = 'elements', $data = array()) 
{ 
    $path = LITHIUM_APP_PATH . '/views/' . $folder;  
    $options['paths']['element'] = '{:library}/views/' . $folder . '/{:template}.{:type}.php'; 

    return $this->_context->view()->render(
     array('element' => $name), 
     $data, 
     $options 
    ); 
} 
} 

ただし、指定したパスではなく、/ view/elementsフォルダ内のみを検索します。

私が間違っていることはありますか?

答えて

2

固定。魅力のように動作します。 Zendはリチウムのパーシャルアルのようです。パーシャルのためのプラグインがあり

<?php echo $this->partial->render('filename', 'foldername', compact('foo', 'bar')); ?> 
1

<?php 

namespace app\extensions\helper; 

use lithium\template\View; 

class Partial extends \lithium\template\Helper 
{ 

    public function render($name, $folder = 'elements', array $data = array()) 
    { 

     $view = new View(array(
      'paths' => array(
       'template' => '{:library}/views/' . $folder . '/' . $name . '.{:type}.php' 
      ) 
     )); 

     return $view->render('all', $data); 

    } 

} 

は次のようにテンプレートで使用することができます。 https://github.com/dmondark/li3_partials

11

このようなものがうまくいけば、私はZendのを知っているが、ここでは、関連するビューからそれらをロードするために、異なった要素のデフォルトパスを設定するためのexempleありません

:-)リチウムによって行うことができたときにプラグインを使用する理由共有パスの代わりに、

との一つのより多くの事を追加してみましょう:私たちは、(模倣Railsのパーシャル)ファイルの名前に国連アンダースコアを追加することにより、通常のビューから要素/パーシャルを区別したい

まず、ブートストラップ時にメディアを再設定しますプロセス(設定/ブートストラップ/ media.php)

Media::type('default', null, array(
    'view' => 'lithium\template\View', 
    'paths' => array(
     'layout' => '{:library}/views/layouts/{:layout}.{:type}.php', 
     'template' => '{:library}/views/{:controller}/{:template}.{:type}.php', 
     'element' => array(
      '{:library}/views/{:controller}/_{:template}.{:type}.php', 
      '{:library}/views/elements/{:template}.{:type}.php' 
     ) 
    ) 
)); 

そして、

それを使用するコントローラを仮定。ビューに呼び出し:

<?= $this->_render('element', 'foo', $data, array('controller' => 'documents')); ?> 

これはviews/documents/_foo.html.php内のファイルを探し、存在しない場合は、/views/elements/foo.html.php

フレームワークのデフォルトの簡単な再設定のこの種にフォールバックされます、リチウムで行うことができます

さらに、テンプレートのパスを再マップして、Lithiumのデフォルトの代わりにpages/users_{username}.phpのようにすることができます(例:デフォルトのコントローラパスで名前空間、ビューパス、ライブラリなどを作成) https://gist.github.com/1854561

+0

いつものように、解決策はより簡単で簡単で、心に留めておくよりも簡単です。 :) – Oerd

+0

リチウムメディアクラスは、その1つの主要な機能です。それは本当に強力です –

関連する問題