在Code Igniter中创建块/模块

Rap*_*ure 6 php codeigniter

到目前为止,我一直喜欢使用CodeIgniter来创建一些简单的Web应用程序(实际上只是学习框架),但我无法找到一种简单的方法来创建块/模块.

我希望有"最近的图像"块,我可以放在网站的任何页面上,而不会在每个页面的控制器中复制查询并将其传递给带有$ vars的模板.

2个问题:

  1. 我已经在视图中使用了partials,但是如何编写一个从url指定的控制器以外的控制器中拉出的partial.
  2. 如何干净地创建一个控制器来拉取该块的数据,而不是
    为它创建页面.

这似乎应该很简单,我只是没有运气找到适当的解决方案.提前致谢.

sit*_*joe 7

好的,这是我对"小部件","模块","部分视图"或任何你想称之为的看法.无论哪种方式,我们指的是页面的可重用项目.

有很多不同的方法可以做到这一点,所以我的方式可能不适合你 - 然后它可能就是你正在寻找的东西!

首先,我将小部件视为视图,假设路径如下:views/widgets/myview.php

我决定在我的控制器中使用哪些小部件.我的方法是将路径放到我想要的视图中,如:

$data['widgets'] = array('widgets/myview', 'widgets/myview2');
Run Code Online (Sandbox Code Playgroud)

然后当我加载我的主视图(仍在我的控制器中)时,我这样做:

$this->load->view('main_view', $data);
Run Code Online (Sandbox Code Playgroud)

现在,小部件数组被传递到主视图.

然后在我的主视图中,当我到达小部件去的地方时,我像这样遍历我的数组:

foreach ($widgets as $widget)
{
    $this->load->view($widget);
}
Run Code Online (Sandbox Code Playgroud)

此循环在我的主视图中运行.方便的是,传递给主视图的所有数据都将在您加载的嵌套视图中可用.

我在Codeigniter中以这种方式制作了许多小部件,这也是我在CMS中使用的方法.


Tee*_*eej 6

偏爱是什么意思?CodeIgniter中没有本机部分视图.虽然,你可以$this->load->view()在意见中.

如果您正在讨论控制器中可用于加载的所有视图的变量,您应该:

$data['info'] = 'value';
$this->load->vars($data);
Run Code Online (Sandbox Code Playgroud)

$info 然后可用于您加载的所有视图.

更新:

您需要在构造函数中执行此操作:

class Page extends Controller {
    function Page()
    {
        $this->load->model('page');
        $data['images'] = $this->page->get_images();
        $this->load->vars($data);
        // images will now be available to all views
    }

}
Run Code Online (Sandbox Code Playgroud)

更新2:

我必须承认我没有使用过模板,但这适用于控制器创建的所有页面.