2

私はこれこれを読みました。しかし、私は答えを見つけることができませんでした。

アクションのビューが存在するこのファイルがあります: View/MyController/index.ctp

このファイル View/Commons/blocks.ctpもあります

Blocks.ctpファイルには次のものが含まれます。

$this->start('sidebar1');
echo 'Some content';
$this->end();

$this->start('sidebar2');
echo 'Some content more';
$this->end();

したがって、「index.ctp」ファイルでは、 sidebar1またはsidebar2を取得したいと考えています。これどうやってするの?これをindex.ctpに書きましたが、うまくいきませんでした。

<?php echo $this->fetch('sidebar1'); ?>

また、これは機能しませんでした

<?php echo $this->fetch('../View/Commons/blocks.ctp/sidebar1'); ?>

ありがとうございました

4

1 に答える 1

3

index.ctp の一番上に置きます:

$this->extend('Common/blocks.ctp');

ブロックとビューの継承により、基本的に標準の Cake レイアウト ファイルに類似した「サブ レイアウト」を作成できます。したがって、メインの layout.ctp があり、コントローラ アクション ビュー ctp は、ブロックを介して「読み込まれる」親ビュー ファイル (たとえば、/Commons/xxxx.ctp) に基づいています。

ブロックは要素に似ていますが、「ビューの継承」機能を使用しない限り、「形式的」ではありません。それらのマークアップとデータは、おそらく複数の場所でスクリプト内に作成されるため、デバッグ/保守がより面倒になる可能性があります (つまり、複数のクラスのブロックにマークアップを追加することを想像してください)。継承を使用しない場合、それらを再利用することも難しくなります。

要素は、任意のコントローラー + アクション ビューまたはレイアウト内で使用できるスタンドアロンのビュー ファイルに似ています。すべてのマークアップが 1 か所にあり、データを渡すだけです。

結論: Cake を初めて使用する場合は、要素だけで問題なく作業できます。ビューの継承は、ビュー/レイアウトをよりエレガントにするのに役立ちますが、複雑さを犠牲にします。

于 2012-04-12T09:46:59.030 に答える