6

通常、私は Zend Framework を使用していますが、Lithium ではこれが恋しいです。パーシャル。ビューには、私が得た最も近い「要素」を使用できるレンダリングメソッドがあります。

<?php $this->_render('element', 'form); ?>

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

render メソッドがパスを指定できる options 引数を受け入れることがわかったので、次のことを試しました。そこで、この問題を解決するためのヘルパーを作成しました。

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 フォルダーのみを検索します。

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

4

3 に答える 3

11

このようなことがうまくいけばLithiumで実行できるのに、なぜプラグインを使用するのですか:-)

Zend についてはわかりませんが、要素のデフォルト パスを別の方法で構成し、共有パスではなく、関連するビュー フォルダーから要素をロードする例を次に示します。

もう 1 つ追加しましょう: ファイルの名前に un アンダースコアを追加して、要素/パーシャルを通常のビューと区別したい (Rails パーシャルを模倣)

まず、ブートストラップ プロセス中にメディアを再構成します (config/bootstrap/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'
        )
    )
));

次に、それを使用します

コントローラ としDocumentsます。ビューを呼び出す:

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

これは内部のファイルを探し、views/documents/_foo.html.php存在しない場合はフォールバックします/views/elements/foo.html.php

この種のフレームワークのデフォルトの単純な再構成は、Lithium で一連のもの (名前空間、ビュー パス、ライブラリなどを作成するためのデフォルト コントローラー パスなど) に対して実行できます。

テンプレート パスを再マップしてpages/users_{username}.php、Lithium のデフォルトの代わりに次のようなものを使用できるようにするもう 1 つの例: https://gist.github.com/1854561

于 2012-05-15T09:23:05.373 に答える
2

修正しました。チャームのように機能します。リチウムのパーシャルのようにZend。

<?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);

    }

}

次のようなテンプレートで使用できます。

<?php echo $this->partial->render('filename', 'foldername', compact('foo', 'bar')); ?>
于 2012-05-14T20:05:03.113 に答える
1

パーシャル用のプラグインがあります。 https://github.com/dmondark/li3_partials

于 2012-05-15T03:07:53.757 に答える