6

在 CodeIgniter 或核心 PHP 中;是否有相当于 Rails 的视图部分和模板?

部分可以让我在我的视图中渲染另一个视图片段。我可以有一个共同的navbar.php观点,我可以指出我的homepage.php观点。模板将在一个地方定义 HTML 页面的整体外壳,并让每个视图只填充正文。

我在 CodeIgniter 文档中可以找到的最接近的内容是Loading multiple views,其中多个视图在控制器中按顺序呈现。在控制器中规定我的页面的视觉外观似乎很奇怪。(即要移动导航栏,我的设计师必须编辑控制器)。

我一直在寻找堆栈溢出的 PHP 方法来实现这一点。我找到了这个页面,它讨论了用ob_start模拟部分。这是 CodeIgniter 中推荐的方法吗?

4

11 回答 11

13

我可能违反了一些 MVC 规则,但我总是将我的“片段”放在单独的视图中,并从需要它们的其他视图中加载它们,CodeIgniter 样式。我几乎所有的视图都分别在顶部和底部加载了页眉和页脚视图:

<? $this->load->view( "header" ); ?>
//Page content...
<? $this->load->view( "footer" ); ?>

然后,标题可以以相同的方式包含 NavBar,等等。

于 2009-04-20T14:11:16.100 回答
5

这基本上就是我使用的:

function render_partial($file, $data = false, $locals = array()) {
    $contents = '';

    foreach($locals AS $key => $value) {
        ${$key} = $value;
    }

    ${$name . '_counter'} = 0;
    foreach($data AS $object) {
        ${$name} = $object;

        ob_start();
        include $file;
        $contents .= ob_get_contents();
        ob_end_clean();

        ${$name . '_counter'}++;
    }

    return $contents;
}

这允许你调用类似的东西:

render_partial('/path/to/person.phtml', array('dennis', 'dee', 'mac', 'charlie'), array('say_hello' => true));

在 /path/to/person.phtml 中有:

<?= if($say_hello) { "Hello, " } ?><?= $person ?> (<?= $person_counter ?>)

这是一些正在发生的魔法,尽管它可以帮助您更好地了解正在发生的事情。完整文件:view.class.php

于 2009-04-20T06:23:55.037 回答
3

在 PHP 中你会使用include

于 2009-04-19T20:19:33.913 回答
2

我发现自己也从 Rails 迁移到 CI,而我对部分所做的基本上是将视图中的部分渲染为变量并从控制器设置它。

所以在视图中你会有类似(_partial.php)的东西:

<h2>Here Comes The Partials</h2>
<?= $some_partials ?>

您可以从控制器中设置它,例如:

$this->load->view('the_view', 
   array('some_partials', 
         $this->load->view('_partial', array(), TRUE)
   )
);

个人比较喜欢用CI的view而不是ob_start,不过就是我=) PS:加载view的时候,第一个参数是视图名,第二个是要传递给视图的参数,第三个是“ECHO” flag,它基本上告诉 CI 是直接渲染它还是返回视图的值,这基本上是我在示例中所做的。

我认为这不是一个好的解决方案,但它对我有用。有人有更好的解决方案吗?

于 2009-04-29T03:20:48.337 回答
2

我最近发布的模板库就是这样工作的。

该模板库还可以很好地与我的Dwoo 实现配合使用,这将为您的视图提供更多功能。

于 2009-12-31T09:08:52.800 回答
0

不幸的是,这根本不是 CodeIgniter 特有的,但是我建议你看看Savant3模板系统。它允许您将模板呈现为字符串。然后你可以简单地把它粘在你想要的任何地方。

也许在 CodeIgniter 中有类似的东西?

我可以想办法在渲染视图时添加一个工具,渲染模板,然后渲染它包含的所有子模板。

于 2009-04-19T18:59:00.580 回答
0

CodeIgniter 和 Smarty 配合得很好。

于 2009-04-20T03:46:35.600 回答
0

这是一篇博客文章,描述了如何将smarty 与 codeigniter一起使用。asp.net 之类的母版页也实现了。

于 2009-04-29T03:34:03.453 回答
0

试用 Ocular - http://codeigniter.com/wiki/Ocular_Layout_Library/ - 它是一个受 Rails 启发的模板库。

于 2010-02-10T04:12:17.437 回答
0

您可以检查它,以获取部分和模板

    http://code.google.com/p/ocular/wiki/Introduction
于 2014-02-02T08:43:53.107 回答
-2

Symfony 通过他们的部分/组件设置来做到这一点。

于 2009-04-19T18:57:28.167 回答