2012-03-01 64 views
2

我正在为我的web应用程序设计主题布局。Codeigniter - 如果其他内部视图

比方说,如果我有两个控制器,A和B.我想一个视图来显示DIV A和B的视图将利用if($this->router->fetch_class() == 'A') { //display div A }

显示格B.

我知道如何设置这个控制器内部

但是,如何实现这一目标呢?

回答

3

NOOOO。不要这样做。 ;)为这类事情编写硬编码的字符串几乎总是一个不好的方法。你的观点会变得杂乱无章,祝你好运重命名你的控制器类。

首先,如果这段代码在你的控制器中,你不知道它是哪个控制器吗?

这让我假设这是一个由多个控制器使用的继承方法,对吧?在这种情况下,有几个选项:

  1. 覆盖它在每个孩子的基础,告诉parent::some_action()方法,你想要显示的核实。 (的“权威”正确的代表团将在这里稍后为您节省一些脱钩头痛...)

  2. 而不是使用fetch_class()使用instanceof(让你的IDE会做繁重的你,如果你曾经重命名班上)。

  3. 考虑将分成子视图(即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'); 
     } 
     //... 
    } 
} 
+1

我自己对这个问题感到困惑。我同意这里。你不想养成在视图中做控制器事情的习惯。为了其他任何人不得不混淆这些代码,请保持简单并包含它。 – 2012-03-01 23:24:52

3

可以具有相同的逻辑控制器,只是传递价值减记至您的看法:

$class = $this->router->fetch_class(); 

$this->load->view('myView', 
        array('class' => $class)); 

然后,只需使用该变量在您的视图:

if ($class == 'A') ... 
+1

哎哟,只是因为它是不是有些普通字符串,我认为它不能被传递到像that..Thanks.will视图给它试一试 – foxns7 2012-03-01 16:41:53

+0

是的,没有我知道的限制;除了字符串之外,其他类型的对象可以传递到视图。 – 2012-03-01 16:58:28