CodeIgniter或PHP等效的Rails部分和模板

Way*_*Kao 6 php codeigniter partials

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

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

我在CodeIgniter文档中找到的最接近的东西是加载多个视图,其中在控制器中按顺序呈现多个视图.在控制器内部控制我的页面的视觉外观似乎很奇怪.(即移动导航栏我的设计师必须编辑控制器).

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

小智 13

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

<? $this->load->view( "header" ); ?>
//Page content...
<? $this->load->view( "footer" ); ?>
Run Code Online (Sandbox Code Playgroud)

然后,标题可以以相同的方式包括NavBar等.


mik*_*att 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

<?= if($say_hello) { "Hello, " } ?><?= $person ?> (<?= $person_counter ?>)
Run Code Online (Sandbox Code Playgroud)

这是一个神奇的事情,虽然这可能会帮助你更好地了解正在发生的事情.完整文件:view.class.php

  • 提取物($本地人); (4认同)