CakePHP:可重用的内容块和MVC

时间:2012-04-25 18:32:05

标签: cakephp cakephp-2.0

我正在尝试通过构建一个简单的CMS应用程序来学习CakePHP,它进展顺利但是当我添加更多时,我对MVC结构感到有些困惑。

除了我的帖子之外,我还创建了一个简单的“内容块”模型(基本上是一个管理员可编辑的标题和内容字段),我希望将其显示为我网站其他页面中的元素。

帮助解释:

My Posts控制器有一个索引操作,列出了所有博客帖子。在该操作的视图中,我还想从数据库中提取特定的“内容块”并将其显示在页面顶部。

另一个例子是管理可编辑的“关于”模糊,它出现在每个页面的页脚中。

最后,以与Wordpress文本小部件或Magento静态块类似的方式,我想阻止“内容块”可直接访问(即domain.com/content_blocks/view/id)

实现这一目标的理想方法是什么,同时坚持CakePHP和MVC惯例? 我已经对它进行了几次尝试(比如在元素中使用requestAction),但只是成功地让它变得更加困惑。

1 个答案:

答案 0 :(得分:1)

我这样做的方式就是你在元素中建议的请求操作,因为这不能通过URL直接访问。因此,您将在elements文件夹中创建一个视图:

应用程序/查看/元件/ 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/