我正在为我的网络应用设计主题布局。
假设我有两个控制器,A和B.我想要一个视图来显示div A和B视图将显示div B.
我知道如何利用if($this->router->fetch_class() == 'A')
{
//display div A
}
但是,如何在视野中实现这一目标?
答案 0 :(得分:3)
您可以在控制器中使用相同的逻辑,只需将值传递给您的视图:
$class = $this->router->fetch_class();
$this->load->view('myView',
array('class' => $class));
然后在视图中使用该变量:
if ($class == 'A') ...
答案 1 :(得分:3)
NOOOO。不要这样做。 ;)这种事情的硬编码字符串几乎总是一种糟糕的方法。你的观点会变得混乱,并且好好重命名你的控制器类。
首先,如果此代码在您的控制器中,您不知道它是哪个控制器吗?
这让我假设这是一个由多个控制器使用的继承方法,对吧?在这种情况下,有几个选项:
以每个孩子为基础覆盖,告诉parent::some_action()
方法要显示哪个div。 (在这里适当授权“权威”将为你节省一些脱钩的麻烦......)
而不是使用fetch_class()
,使用instanceof
(这样,如果您重命名该类,您的IDE将为您完成繁重的任务)。
考虑将此内容拆分为子视图(即部分内容)。在视图中进行字符串比较会使真的混乱。信任。我
以下是我的建议:
<?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');
}
//...
}
}