2012-04-25 113 views
2

我試圖通過構建一個簡單的CMS應用來學習CakePHP,它進展順利,但隨着我添加更多內容,我對MVC結構有點困惑。CakePHP:可重用的內容塊和MVC

除了我的文章,我還爲「內容塊」(基本上是管理員可編輯的標題和內容字段)創建了一個簡單的模型,我想在我的網站的其他頁面中顯示元素。

爲了幫助解釋:

我的帖子控制器具有指標作用,列出了所有的博客文章。在該行動的視圖中,我也想從數據庫中提取特定的「內容塊」並將其顯示在頁面的頂部。

另一個例子是管理員可編輯的'about'blurb,出現在每頁的頁腳中。

最後,以類似的方式向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

另外,你可能想要簽出Croogo,它有很多功能你廁所國王和更多已經建在:http://croogo.org/

+0

感謝您的答覆。我終於開始工作了!你鏈接的博客文章稍微澄清了requestAction的開銷。它沒有特別提到緩存 - 我假設它使用'array('cache'=> true)'在元素函數上? – Viento 2012-04-26 09:54:01

+0

是的,那是緩存元素的代碼。在文章中,它提到了切換到緩存的元素,從而提高了性能。 您可以使用多種不同的選項來緩存多長時間:http://book.cakephp.org/2.0/en/core-libraries/caching.html – jimiyash 2012-04-26 20:01:07