0

私は CakePHP (2.2.x) を使用してブログを作成しています。ブログの一部はサイドバーです。最近の投稿、アーカイブ、メタを含むワードプレスのようなサイドバー。サイドバーに要素を使用するか、ヘルパーを使用するかがわかりません。

今のところ、要素を使用しています。いくつかのコード スニペット:

コントローラー/PostsController.php

public function index() {
    $this->set('posts', $this->Post->find('all'));
}

public function show($id) {
    $this->set('posts', $this->Post->find('all'));
    $this->set('post', $this->Post->findById($id));
}

ビュー/投稿/index.ctp

<div class="span8">
    <?php foreach ($posts as $post) { ... } ?>
</div>
<?php echo $this->element('sidebar', array('posts' => $posts)); ?>

表示/投稿/show.ctp

<div class="post">
   ... render the post using $post ...
</div>
<?php echo $this->element('sidebar', array('posts' => $posts)); ?>

ビュー/要素/sidebar.ctp

<?php foreach ($posts as $post) { ... render the recent posts ... } ?>

ご覧のとおり、要素show.ctpindex.ctpインクルード要素の両方と両方に変数sidebar.ctpが必要です。$postsしたがって、とアクション$this->Post->find('all')の両方を呼び出す必要があります。一度だけ電話したいのですが、ヘルパーを使用するとうまくいくのではないかと考えています。indexshow$this->Post->find('all')

4

1 に答える 1

1

あなたが使用したいでしょうrequestAction()

requestAction() を使用すると、要素を最大限に活用できます。requestAction() 関数は、コントローラ アクションからビュー変数をフェッチし、それらを配列として返します。これにより、要素を真の MVC スタイルで実行できます。要素のビュー変数を準備するコントローラー アクションを作成し、element() の 2 番目のパラメーター内で requestAction() を呼び出して、コントローラーからビュー変数を要素にフィードします。

詳細については、こちらをご覧ください: http://book.cakephp.org/2.0/en/views.html#passing-variables-into-an-element

基本的に、要素がデータを取得する場所を指定するだけです。要素が読み込まれると (どのページに関係なく)、指定されたアクションが実行され、必要なデータが取得されます。

于 2013-01-12T19:18:38.413 に答える