在Code Igniter中创建块/模块

时间:2011-01-04 16:39:01

标签: php codeigniter

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

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

2个问题:

  1. 我在视图中使用了部分内容 已经,但我怎么写 从控制器拉出的部分 除了指定的那个 网址。
  2. 我怎样才能干净利落地创造一个 拉取数据的控制器 阻止并且不会创建一个 页面。
  3. 这似乎应该很简单,我只是没有运气找到合适的解决方案。提前谢谢。

3 个答案:

答案 0 :(得分:7)

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

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

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

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

$data['widgets'] = array('widgets/myview', 'widgets/myview2');

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

$this->load->view('main_view', $data);

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

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

foreach ($widgets as $widget)
{
    $this->load->view($widget);
}

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

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

答案 1 :(得分:6)

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

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

$data['info'] = 'value';
$this->load->vars($data);
然后

$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
    }

}

更新2:

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

答案 2 :(得分:3)

好消息是CodeIgniter肯定会朝这个方向发展。 首先,看看wiredeignz的Modular Extensions。在这里能找到它: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/overview 有良好的文档,可以帮助您入门。 这对你来说是完美的,因为你可以运行一个模块(即调用模块的控制器/方法并返回一个视图部分)并将其插入模板或全局视图或其他任何内容。 另外,请看CI 2.0 - https://bitbucket.org/ellislab/codeigniter/overview 它与早期版本的codeigniter完全不同,并且有许多非常令人兴奋的新功能。虽然在测试版中它非常非常稳定。编写HMVC以使用CI 2.0。

另外,请查看以这种方式工作的其他CI项目的代码。我会推荐Phil Sturgeon的pyroCMS。他确实是一位领导者,并撰写了许多有关模块化和CI 2.0的有趣文章和帖子。 www.philsturgeon.co.uk

这种工作方式对于保持站点的独立位非常有用,只在需要时才使用。

尝试更直接地帮助你......

不要忘记您可以使用可选的第三个参数缓冲输出。如果您不确定,请查看用户指南。

$partial = $this->load->view('someView', $data, true);