web-dev-qa-db-ja.com

他のビューを含むCakePHPビュー

私はCakePHPアプリケーションを持っており、フラグに応じて、製品メディア(写真またはビデオ)を含むビューを表示します。ビデオを脅かす、または写真を脅かす別のビューを含める方法があるかどうかを知りたいです。これらの「小さなビュー」を他のいくつかの目的に使用したいので、再利用するにはケーキコンポーネントの「ような」ものにする必要があります。

Cakeの慣習に従うために使用することをお勧めするもの(そして生のinclude('')コマンドを使用しない)

13

これをチェックしてください link そしてより具体的にはElements-そのマニュアルページの一部で、あなたが知る必要があるすべてを教えてくれるはずです

18
thr

コントローラ(この例では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の使用にはかなりの費用がかかると思いますので、キャッシュを調べてください。

7
Chris Hawes

単に使用してください:

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

コントローラのアクションとビューのコードの理想的な再利用。

6
LenArt

CakePHP 2.xの場合

Cake 2.xの新機能は、特定のビューを拡張する機能です。したがって、要素は再利用可能なコードを少し持つのに最適ですが、ビューを拡張すると、ビュー全体を再利用できます。

詳細/詳細については、マニュアルを参照してください

http://book.cakephp.org/2.0/en/views.html#extending-views

4
Rob Forrest

要素は、呼び出し元のビューがアクセスできるのと同じデータにアクセスできるようにする場合に機能します。

埋め込みビューが独自のデータセットにアクセスできるようにする場合は、 requestAction() のようなものを使用することをお勧めします。これにより、スタンドアロンの本格的なビューを埋め込むことができます。

1
Lucas Oman

CakePHP 3.xでは、簡単に使用できます。

$this->render('view')

これにより、親ビューと同じディレクトリからビューがレンダリングされます。

0
Alex Solovyh

これらの「小さなビュー」を他のいくつかの目的に使用したいので、再利用するには、ケーキコンポーネントの「ような」ものにする必要があります。

これは、 ここで説明 のように、「ヘルパー」を使用して実行されます。しかし、それが本当にあなたが望むものかどうかはわかりません。 " Elements "の提案も正しいようです。それはあなたが達成しようとしていることに大きく依存します。私の2セント...

0