6

CodeIgniter、またはコア PHP; Rails のビュー パーシャルとテンプレートに相当するものはありますか?

パーシャルを使用すると、ビュー内に別のビュー フラグメントをレンダリングできます。navbar.php自分のビューの内側を指し示すことができる共通のビューを持つことができましたhomepage.php。テンプレートは、HTML ページの全体的なシェルを 1 か所で定義し、各ビューで本文を埋めるだけです。

CodeIgniter のドキュメントで見つけた最も近いものはLoading multiple viewsで、複数のビューがコントローラーで順番にレンダリングされます。コントローラー内でページの視覚的な外観を決定するのは奇妙に思えます。(つまり、ナビゲーション バーを移動するには、デザイナーがコントローラーを編集する必要があります)。

これを達成するための PHP の方法について、スタックオーバーフローを検索してきました。ob_startを使用したパーシャルのシミュレートについて説明しているこのページを見つけました。それは CodeIgniter 内で推奨されるアプローチですか?

4

11 に答える 11

5

これは基本的に私が使用するものです:

function render_partial($file, $data = false, $locals = array()) {
    $contents = '';

    foreach($locals AS $key => $value) {
        ${$key} = $value;
    }

    ${$name . '_counter'} = 0;
    foreach($data AS $object) {
        ${$name} = $object;

        ob_start();
        include $file;
        $contents .= ob_get_contents();
        ob_end_clean();

        ${$name . '_counter'}++;
    }

    return $contents;
}

これにより、次のようなものを呼び出すことができます。

render_partial('/path/to/person.phtml', array('dennis', 'dee', 'mac', 'charlie'), array('say_hello' => true));

および /path/to/person.phtml には次のものがあります。

<?= if($say_hello) { "Hello, " } ?><?= $person ?> (<?= $person_counter ?>)

これは進行中の魔法ですが、何が起こっているのかをよりよく理解するのに役立つかもしれません. 完全なファイル: view.class.php

于 2009-04-20T06:23:55.037 に答える
3

PHPでは、include

于 2009-04-19T20:19:33.913 に答える
2

私の最近リリースされたテンプレート ライブラリは、このように動作します。

このテンプレート ライブラリは、私のDwoo 実装ともうまく機能し、ビューをより強力にします。

于 2009-12-31T09:08:52.800 に答える
2

私も Rails から CI に移行していることに気付きました。パーシャルで行ったことは、基本的にビュー内のパーシャルを変数としてレンダリングし、コントローラーから設定することでした。

したがって、ビューには (_partial.php) のようなものがあります。

<h2>Here Comes The Partials</h2>
<?= $some_partials ?>

そして、次のようにコントローラーから設定できます。

$this->load->view('the_view', 
   array('some_partials', 
         $this->load->view('_partial', array(), TRUE)
   )
);

個人的には、ob_start の代わりに CI のビューを使用することを好みますが、それは私です =) PS: ビューをロードするとき、最初の引数はビュー名、2 番目の引数はビューに渡されるパラメーター、3 番目の引数は「ECHO」です。フラグは、CI に直接レンダリングするか、代わりにビューの値を返すかを基本的に指示します。これは基本的に、例で行ったことです。

私はそれが良い解決策だとは思いませんが、私にとってはうまくいきます。誰もがより良い解決策を持っていますか?

于 2009-04-29T03:20:48.337 に答える
0

Ocularを試してみてください-http ://codeigniter.com/wiki/Ocular_Layout_Library/-そのレールに触発されたテンプレートライブラリ。

于 2010-02-10T04:12:17.437 に答える
0

残念ながら、これは CodeIgniter 固有のものではありませんが、Savant3テンプレート システムを確認することをお勧めします。テンプレートを文字列にレンダリングできます。その後、好きな場所に貼り付けるだけです。

多分CodeIgniterにそのようなものがありますか?

ビューをレンダリングするときに機能を追加し、テンプレートをレンダリングしてから、それに含まれるすべてのサブテンプレートをレンダリングする方法を考えることができます。

于 2009-04-19T18:59:00.580 に答える
0

CodeIgniter と Smarty はうまく連携します。

于 2009-04-20T03:46:35.600 に答える
0

パーシャルとテンプレートについては、確認できます

    http://code.google.com/p/ocular/wiki/Introduction
于 2014-02-02T08:43:53.107 に答える
0

これは、 codeigniter で smartyを使用する方法を説明するブログ投稿です。asp.net のような masterpage も実装されています。

于 2009-04-29T03:34:03.453 に答える
-2

symfony は、部分/コンポーネントのセットアップでこれを行います。

于 2009-04-19T18:57:28.167 に答える