【问题标题】:CakePHP: Reusable content blocks and MVCCakePHP:可重用的内容块和 MVC
【发布时间】:2012-04-25 18:32:04
【问题描述】:

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

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

帮助解释:

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

另一个例子是出现在每个页面的页脚中的管理员可编辑的“关于”简介。

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

在忠实于 CakePHP 和 MVC 约定的同时实现这一目标的理想方法是什么? 我已经尝试过几次(例如在元素中使用 requestAction),但只是成功地变得更加困惑。

【问题讨论】:

    标签: cakephp cakephp-2.0


    【解决方案1】:

    我会按照您在元素内的请求操作建议的方式执行此操作,因为无法通过 URL 直接访问该操作。因此,您将在元素文件夹中创建一个视图:

    app/View/Elements/block.ctp:

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

    app/Controller/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/

    【讨论】:

    • 感谢您的回复。我终于让它工作了!您链接的那篇博客文章已经澄清了 requestAction 开销。虽然它没有特别提到缓存 - 我假设它在元素函数上使用array('cache' =&gt; true)
    • 是的,就是缓存元素的代码。在文章中它确实提到了切换到提高性能的缓存元素。您还可以使用不同的选项来缓存多长时间:book.cakephp.org/2.0/en/core-libraries/caching.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多