2012-04-25 16 views
2

シンプルなCMSアプリケーションを構築してCakePHPを習得しようとしていますが、うまくいきましたが、さらに追加していくうちに、MVC構造によって少し混乱しています。CakePHP:再利用可能なコンテンツブロックとMVC

自分の投稿に加えて、自分のサイトの他のページに要素として表示したい「コンテンツブロック」(基本的には編集可能なタイトルとコンテンツフィールド)の簡単なモデルを作成しました。

説明を助けるために:

私の投稿コントローラは、ブログの記事のすべてを一覧表示しますindexアクションを持っています。そのアクションのビューでは、データベースから特定の「コンテンツブロック」を取り出してページの上部に表示したいと思っています。

もう1つの例は、すべてのページのフッターに表示される管理者編集可能な「約」吹き出しです。

最後に、WordpressのテキストウィジェットやMagentoの静的ブロックと同様の方法で、私は「コンテンツのブロック」を防ぐしたい直接アクセス可能(すなわちdomain.com/content_blocks/view/id)

何CakePHPとMVCのコンベンションに真実を込めてこれを実現する理想的な方法ですか? 私はそれにいくつかのスタブ(要素でrequestActionを使用するなど)を持っていましたが、もっと混乱することに成功しました。

答えて

1

私は、URLを通じて直接アクセスできないため、要素内でリクエストアクションを提案したようです。だから、要素フォルダ内のビューを作成します。

アプリ/ビュー/要素/ block.ctpを:

<?php $sidebar = $this->requestAction(array(
    'controller' => 'ContentBlocks', 
    'action'=> 'viewBlock', 
    'yourtitle' 
)); 
// layout your block here 
?> 

アプリ/コントローラ/ ContentBlocksController.php

public function viewBlock($title) { 
    return $this->ContentBlock->findByTitle($title); 
} 

を次にあなたが見ることができます要素とrequestActionでキャッシングを行う方法のこの記事:http://mark-story.com/posts/view/how-using-requestaction-increased-performance-on-my-site

また、あなたはあなたが機能する多くの機能を持っている王のために既に組み込まれて:http://croogo.org/

+0

返信ありがとうございます。私はついにそれを手に入れました!あなたがリンクしているそのブログ記事は、requestActionオーバーヘッドを少し明確にしました。それは特にキャッシングについては言及していません - 私はそれが 'array( 'cache' => true)'を要素関数に使用していると仮定しますか? – Viento

+0

はい、これは要素をキャッシュするコードです。この記事では、パフォーマンスを向上させるキャッシュされた要素への切り替えについて述べました。 キャッシュしたい期間については、さまざまなオプションがあります。http://book.cakephp.org/2.0/ja/core-libraries/caching.html – jimiyash

関連する問題