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等.
这基本上就是我用的:
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