2012-04-11 22 views
2

私はthisthisを読みました。 しかし、私は答えを見つけることができませんでした。 ビュー/ MyController/index.ctp外部ctpファイルからブロックを取得

私も、このファイルを持っている ビュー/コモンズ/ blocks.ctp

ブロック:

私は自分の行動の見解が存在し、このファイルを、持っています.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'); ?> 

また、この1つは

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

があなたのindex.ctpの上部に

+1

要素を使用していない理由はありますか?要素も別々にキャッシュできます。 – Costa

+0

@Costaお返事ありがとうございます。私は初心者ですので、私は "ビューブロック"と "要素"の違いを認識していません。バージョン2.1では「ビューブロック」が新しくなっていますが、要素は長い間存在しています。それらの使用法は同様ですが、要素をエコーするかブロックをフェッチするかの違いは何ですか?再びありがとう – trante

答えて

3

入れありがとうござい動作しませんでした:あなたをブロックし、ビューの継承と

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

を基本的なCakeレイアウトファイルに類似した "サブレイアウト"を作成できます。したがって、あなたはメインのlayout.ctpを持っていて、コントローラアクションビューctpはブロックを介して "人口"になっている親ビューファイル(例えば/Commons/xxxx.ctp)に基づいています。

ブロックは「ビュー継承」機能を使用しない限り、要素は類似していますが、「フォーマル」ではありません。彼らのマークアップ&のデータは、複数の場所でスクリプト内で作成されるため、デバッグやメンテナンスがより面倒です(つまり、複数のクラスからブロックにマークアップを追加することを想像してください)。また、継承を使用しないと再利用するのが難しくなります。

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

ボトムライン:もしあなたがケーキを初めて使うなら、要素だけでうまくいくことができます。ビューの継承はビュー/レイアウトをより洗練されたものにするのに役立ちますが、いくらかの複雑さを伴います。

+0

詳細な返信をありがとうございます。何ヶ月も私は要素を使用します。私は後でブロックに渡すだろう。今私は要素の使用ロジックを設定しようとしている。私は自分の要素ごとにctpファイルを追加し、要素をうまく反響させることができます。私はベストプラクティスを探しています。 >>要素をレイアウトファイルに配置し、ビューファイルの要素に引数を渡す必要がありますか? >>または、コントローラファイルから要素に引数を渡す必要がありますか? >>それ以外は複雑になるのですか?コントローラ - >ビュー - >要素 - レイアウト>>または推奨されている方法ですか?ありがとう – trante

+2

要素がサイトのすべての単一ページに表示される場合のみ、要素をレイアウトに配置します。それ以外の場合、データは常にコントローラに入力され、ビューではデータを要素に渡します。 (要素は 'echo'文によって表示されるので、ビュー/レイアウト内でのみ意味があります) – Costa

関連する問題