私はCakePHPアプリケーションを持っており、フラグに応じて、製品メディア(写真またはビデオ)を含むビューを表示します。ビデオを脅かす、または写真を脅かす別のビューを含める方法があるかどうかを知りたいです。これらの「小さなビュー」を他のいくつかの目的に使用したいので、再利用するにはケーキコンポーネントの「ような」ものにする必要があります。
Cakeの慣習に従うために使用することをお勧めするもの(そして生のinclude('')
コマンドを使用しない)
これをチェックしてください link そしてより具体的にはElements-そのマニュアルページの一部で、あなたが知る必要があるすべてを教えてくれるはずです
コントローラ(この例ではpostsコントローラ)。
function something() {
return $this->Post->find('all');
}
要素ディレクトリ(app/views/element)に、posts.ctpというファイルを作成します。
Posts.ctp内:
$posts = $this->requestAction('posts/something');
foreach($posts as $post):
echo $post['Post']['title'];
endforeach;
それからあなたの見解では:
<?php echo $this->element('posts'); ?>
これは主にここのCakePHPの本から取られています: requestActionで再利用可能な要素を作成する
RequestActionの使用にはかなりの費用がかかると思いますので、キャッシュを調べてください。
単に使用してください:
<?php include('/<other_view>.ctp'); ?>
.ctpで、アクションはで終わります。
たとえば、アーカイブされた関数を作成します
function archived() {
// do some stuff
// you can even hook the index() function
$myscope = array("archived = 1");
$this->index($myscope);
// coming back, so the archived view will be launched
$this->set("is_archived", true); // e.g. use this in your index.ctp for customization
}
インデックスアクションを調整する可能性があります。
function index($scope = array()) {
// ...
$this->set(items, $this->paginate($scope));
}
Archive.ctpは次のようになります。
<?php include('/index.ctp'); ?>
コントローラのアクションとビューのコードの理想的な再利用。
CakePHP 2.xの場合
Cake 2.xの新機能は、特定のビューを拡張する機能です。したがって、要素は再利用可能なコードを少し持つのに最適ですが、ビューを拡張すると、ビュー全体を再利用できます。
詳細/詳細については、マニュアルを参照してください
要素は、呼び出し元のビューがアクセスできるのと同じデータにアクセスできるようにする場合に機能します。
埋め込みビューが独自のデータセットにアクセスできるようにする場合は、 requestAction()
のようなものを使用することをお勧めします。これにより、スタンドアロンの本格的なビューを埋め込むことができます。
CakePHP 3.xでは、簡単に使用できます。
$this->render('view')
これにより、親ビューと同じディレクトリからビューがレンダリングされます。