我正在为我的web应用程序设计主题布局。Codeigniter - 如果其他内部视图
比方说,如果我有两个控制器,A和B.我想一个视图来显示DIV A和B的视图将利用if($this->router->fetch_class() == 'A') { //display div A }
我知道如何设置这个控制器内部
但是,如何实现这一目标呢?
我正在为我的web应用程序设计主题布局。Codeigniter - 如果其他内部视图
比方说,如果我有两个控制器,A和B.我想一个视图来显示DIV A和B的视图将利用if($this->router->fetch_class() == 'A') { //display div A }
我知道如何设置这个控制器内部
但是,如何实现这一目标呢?
NOOOO。不要这样做。 ;)为这类事情编写硬编码的字符串几乎总是一个不好的方法。你的观点会变得杂乱无章,祝你好运重命名你的控制器类。
首先,如果这段代码在你的控制器中,你不知道它是哪个控制器吗?
这让我假设这是一个由多个控制器使用的继承方法,对吧?在这种情况下,有几个选项:
覆盖它在每个孩子的基础,告诉parent::some_action()
方法,你想要显示的核实。 (的“权威”正确的代表团将在这里稍后为您节省一些脱钩头痛...)
而不是使用fetch_class()
,使用instanceof
(让你的IDE会做繁重的你,如果你曾经重命名班上)。
考虑将分成子视图(即partials)。它真的得到凌乱的做一个视图中的字符串比较。相信。我。
这里就是我会建议:
<?php
// Overridden core class
class MY_Controller extends CI_Controller {
public function some_action()
{
//...
if ($this instanceof Controller_class_that_uses_div_a)
{
$this->load->view('view_for_div_A');
}
else
{
$this->load->view('view_for_div_B');
}
//...
}
}
可以具有相同的逻辑控制器,只是传递价值减记至您的看法:
$class = $this->router->fetch_class();
$this->load->view('myView',
array('class' => $class));
然后,只需使用该变量在您的视图:
if ($class == 'A') ...
哎哟,只是因为它是不是有些普通字符串,我认为它不能被传递到像that..Thanks.will视图给它试一试 – foxns7 2012-03-01 16:41:53
是的,没有我知道的限制;除了字符串之外,其他类型的对象可以传递到视图。 – 2012-03-01 16:58:28
我自己对这个问题感到困惑。我同意这里。你不想养成在视图中做控制器事情的习惯。为了其他任何人不得不混淆这些代码,请保持简单并包含它。 – 2012-03-01 23:24:52