我正在开发一个codeigniter项目,要求我根据情况在表单中显示不同的html。
我真正想做的就是将这些信息传递给视图并将其输出到屏幕上。
重要的是要注意我使用修改后的codeigniter版本,它不需要任何$this->load->view
来创建视图。页眉和页脚是自动设置的,因此使用$this->load->view
可能无法正常工作。
我只是想要找到我的文件的东西并允许它将它传递给我的视图,这样我就可以输出它了。我知道我可以用include做到这一点,但想知道是否有更简单的方法。
答案 0 :(得分:1)
听起来这个不需要加载视图的功能实际上会阻碍你。我不推荐这种做法。您可以推断,如果您没有传递视图,它会拉出默认视图,但您可以覆盖它。您可以创建一个MY_Controller,其中包含一个处理模板和视图的方法,如果您没有显式地声明一个视图来调用dir中与该类同名的视图,并且该文件与该方法中的方法同名,则它将假设uri(http://ellislab.com/codeigniter/user-guide/general/routing.html)。这样,如果您需要显式调用视图或更改任何内容,您只需覆盖该方法或填充属性:
if (count($this->loadViews))
{
foreach ($this->loadViews as $view)
$this->load->view($view);
}else
{
$this->load->view($this->uri->segment(1, 'welcome') . '/' . $this->uri->segment(2, 'index'))
}
您还可以在视图中调用可能仍然有效的视图,这样您就可以始终进入修改后的CI版本调用的默认视图,并执行类似
的操作<? if isset($flag): ?>
$this->load->view('partial_view1');
<? else ?>
$this->load->view('partial_view2');
<? endif; ?>
您也可以查看钩子来处理这个问题。我有一个项目,通过挂钩和ob_start视图控制我的视图和模板,然后擦除它们,然后输出数据。 http://ellislab.com/codeigniter/user-guide/general/hooks.html
我希望这些解决方案都有所帮助。如果您还需要其他任何东西,请让我知道。
答案 1 :(得分:1)
我明白了。我可能不应该说它被修改了,因为除了你不能使用load-&gt;这一事实之外它是无关紧要的。如上所述,我只想将文件作为视图数据输出。我想出的是下面的内容。
public function form($form_name = NULL)
{
$this->view_data['form'] = $this->load->file(APPPATH.'views/stone_sheets/rectangular.php',TRUE);
}
基本上我的问题是我不知道有一个加载文件帮助器,当我尝试使用它时,我开始时没有APPPATH。谢谢您的帮助。
答案 2 :(得分:0)
您需要向我们提供更多信息,因为您使用的是非标准的codeigniter,我们不确定您在代码的哪个位置,因为它与标准不同。
通常你需要传递一些数据来做一些逻辑或者(最佳实践)是让你的视图控制器在你的控制器内切换你的表单,然后首先获得标准视图,然后根据情况使用单独的表单。
例如:
public function some_controller($situation)
{
$this->load->view('head');
switch($situation)
{
case '1': $this->load->view('view1');
case '2': $this->load->view('view2');
}
$this->load->view('footer');
}
但是,由于我们不知道这个“非标准”codeigniter是什么,因此我们无法对无法理解的内容进行故障排除。
答案 3 :(得分:0)
我不确定您在$this->load->view()
方法中修改了什么。无论哪种方式,您都可以将变量传递给视图,并根据该变量,您可以在main view
例如,假设您已将$situation
变量传递给视图而不是
if($situation == 'foo')
{
include(APPPATH.'views/file1.php');
}
else
{
include(APPPATH.'views/file2.php');
}