CodeIgniter或相当于PHP的Rails片段和模板
在CodeIgniter或核心PHP中;是否有Rails的视图片段和模板的等价物 局部渲染可以让我在视图中渲染另一个视图片段。我可以有一个普通的CodeIgniter或相当于PHP的Rails片段和模板,php,codeigniter,partials,Php,Codeigniter,Partials,在CodeIgniter或核心PHP中;是否有Rails的视图片段和模板的等价物 局部渲染可以让我在视图中渲染另一个视图片段。我可以有一个普通的navbar.php视图,可以指向homepage.php视图的内部。模板将在一个位置定义HTML页面的整体外壳,并让每个视图只填充主体 在CodeIgniter文档中,我能找到的最接近的东西是,在控制器中按顺序呈现多个视图。在控制器中口述我的页面的视觉外观似乎很奇怪。(即,要移动导航栏,设计师必须编辑控制器) 我一直在stackoverflow上搜索一
navbar.php
视图,可以指向homepage.php
视图的内部。模板将在一个位置定义HTML页面的整体外壳,并让每个视图只填充主体
在CodeIgniter文档中,我能找到的最接近的东西是,在控制器中按顺序呈现多个视图。在控制器中口述我的页面的视觉外观似乎很奇怪。(即,要移动导航栏,设计师必须编辑控制器)
我一直在stackoverflow上搜索一种PHP方法来实现这一点。我已经找到了,它讨论了如何使用模拟partials。这是CodeIgniter内部的推荐方法吗?Symfony通过他们的设置做到这一点。不幸的是,这根本不是CodeIgniter特有的,但是我建议您查看一下模板系统。它允许您将模板呈现为字符串。然后你可以把它贴在任何你想要的地方 也许CodeIgniter中有类似的东西
我可以想出一种方法,在渲染视图时添加一个工具,渲染模板,然后是它包含的所有子模板。在PHP中,您可以使用CodeIgniter和Smarty一起玩。这基本上就是我使用的:
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 ?>)
()
这是一个神奇的过程,虽然它可以帮助你更好地了解正在发生的事情。完整文件:我可能违反了一些MVC规则,但我总是将我的“片段”放在单独的视图中,并从需要它们的其他视图中加载它们(CodeIgniter样式)。几乎所有视图都在顶部和底部分别加载页眉和页脚视图:
<? $this->load->view( "header" ); ?>
//Page content...
<? $this->load->view( "footer" ); ?>
//页面内容。。。
标题可以以同样的方式包含导航栏,等等。我发现自己也在从Rails移动到CI,我对partials所做的基本上是将视图中的partials呈现为变量,并从控制器进行设置 因此,在视图中,您将看到类似(_partial.php)的内容: 就个人而言,我更喜欢使用CI的视图而不是ob_start,但这就是我=) PS:加载视图时,第一个参数是视图名称,第二个参数是要传递给视图的参数,第三个参数是“ECHO”标志,它基本上告诉CI是直接渲染还是返回视图的值,这基本上就是我在示例中所做的
虽然我不认为这是一个好的解决方案,但它对我很有效。有谁有更好的解决方案吗?这里有一篇博客文章介绍了如何解决这个问题。还实现了类似asp.net的母版页。我最近发布的母版页就是这样工作的
该模板库还可以很好地与my配合使用,这将为您的视图提供更强大的功能。试试看——这是一个受rails启发的模板库。您可以查看它,查看部分和模板
http://code.google.com/p/ocular/wiki/Introduction
这是不需要自己的数据的分部的方法。但是对于需要数据的部分视图(“小部件”),类似于第三方的“模块化扩展HMVC”是一个不错的选择。我认为这是呈现部分的最简单方法。请确保将
$this->load->view()
函数放在视图文件中,而不是控制器中(通过$data
数组键),因为它只会将其回显出来+1我不相信您能够在控制器中使用ob\u start()
,因为CI\u Loader
在加载视图时使用它。所以你会得到一个错误。最好使用$this->load->view('view\u name',$data,true)方法以字符串形式返回渲染视图。我不知道这是否正是OP所要求的。我相信在评估时运行包含的文件;OP要求使用Rails样式的include(首先计算包含的文件,IIRC,然后合成)。当根据页面/部分/查看内容中的内容决定页面模板内容时,这会产生很大的不同。
$this->load->view('the_view',
array('some_partials',
$this->load->view('_partial', array(), TRUE)
)
);
http://code.google.com/p/ocular/wiki/Introduction