【问题标题】:CodeIgniter - the right way to create "block" elements on web pageCodeIgniter - 在网页上创建“块”元素的正确方法
【发布时间】:2011-02-08 02:26:18
【问题描述】:

我一直在寻找这个问题的解决方案,但还没有看到任何“有效的 mvc”解决方案。 我希望我能为你们解释清楚我的问题。

  • 我需要在我的网站上创建一个 动态 HTML 块。 (例如,包含用户最新博客 cmets 的块)。

  • 我有一个模板视图文件(一个包含页眉、内容容器和页脚的文件),我需要在其中添加一些内容和这个块元素。

问题是我不想在每个控制器上复制这个块代码。只是感觉很愚蠢,我相信有更好的方法来做到这一点,而不是在所有控制器文件上重新复制相同的东西?

我可以在另一个视图中添加视图就好了,但让我烦恼的是如何将动态内容实际生成到该块的视图文件中。 我不能从视图文件中调用控制器,从控制器文件中调用控制器或从视图文件中调用模型,因为我理解这不是“mvc”方式?

有人对此有任何技巧或提示吗?

【问题讨论】:

    标签: php html model-view-controller codeigniter templates


    【解决方案1】:

    我遇到了同样的问题。我不想在我的操作方法中重复这种常见的逻辑。我正在将此逻辑移至基本控制器,但感觉有点笨拙。

    我最终偶然发现了 CodeIgniter 的 HMVC 扩展。它是一种非常好的生成局部视图的方法。您创建一个负责生成部分的模块。该模块以 MVC 方式编码,就像您对页面进行编码一样。然后可以将该模块包含在您的视图中。

    如果您之前使用过 ASP.NET MVC,则类似于使用 Html.RenderAction

    【讨论】:

      【解决方案2】:

      正如 Zack 所指出的,MY_Controller 非常适合创建全局数据。

      我这样做的一种方法是创建“部分”视图,它只是一个包含所需一切的视图。有时这是一点点 PHP,但对于这些特殊的视图,我不介意把它们弄脏。

      另一种方法是将辅助函数与视图配对。然后将所有 PHP(获取 RSS、缓存等的 cURL 请求)放入辅助函数中:

      $this->load->view('partials/rss_feed');
      

      最好的方法是实现Widgets system from PyroCMS。那东西太棒了! :D

      【讨论】:

      • 使用 partials + helpers 非常符合 Rails-y。并不是说这有什么问题。我也用它。
      • 我在我的 CI 应用程序中使用这样的部分,它工作得很好。我添加了自己的自定义基本控制器,它添加了我用于各种事物的部分集合,例如 xml_view、json_view、page_view、doc_view 等。
      【解决方案3】:

      如果您有多个控制器来绘制这些数据,您可以使用模型,或者使用 MY_Controller 扩展 Controller 类。这在 CodeIgniter 用户指南中有很好的记录。

      如果只是针对同一个控制器中的多个方法,可以把逻辑放在Controllers的构造函数中

      重新阅读您的帖子后,我认为您最好的做法是使用 MY_Controller documented here. 扩展 CodeIgniter 的 Controller 类

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多