Codeigniter中的is_home()函数

时间:2013-05-06 16:20:13

标签: php codeigniter codeigniter-url

我知道 Wordpress 具有is_home()功能来确定主页 在 YII 中,我使用这样的解决方案Yii check if homepage

CI 中,模板实际上,我曾多次面对它。例如,在标记<body>中添加一些css类。

我找到的所有http://ellislab.com/forums/viewthread/194637/#916899
任何人都可以帮助我或编写自己的解决方案吗?

提前感谢

6 个答案:

答案 0 :(得分:18)

我只是想在这里添加我的答案,因为其他方法不适用于我经过大量修改的CI版本。

这个片段是我用来检测我们是否在主页上的内容

if (!$this->uri->segment(1)) {
    // We are on the homepage
}

答案 1 :(得分:5)

如果需要,您可以使用$this->router->fetch_class()获取当前控制器,$this->router->fetch_method()也可以使用该方法。

与您链接的Yii示例类似,您可以执行类似

的操作
$is_home = $this->router->fetch_class() === 'name_of_home_controller' ? true : false;

或者也匹配方法

$is_home = ($this->router->fetch_class() === 'name_of_home_controller' && $this->router->fetch_method() === 'name_of_home_method') ? true : false;

这种方式即使页面网址为http://yoursite.com/(假设主控制器+方法是默认设置),http://yoursite.com/home_controller/http://yoursite.com/something/that/routes/to/home/controller/等,只要它调用该控制器,它会将$ is_home设置为true。

编辑:如果您不想明确说明家庭控制器并将其设置为默认控制器,您也可以使用($this->router->fetch_class() === $this->router->default_controller)

CI v3更新:
CI v3中已弃用$this->router->fetch_class()$this->router->fetch_method()。请改用$this->router->class$this->router->method

答案 2 :(得分:1)

为什么不只是简单地

public function name_of_home_method()
    {
        $data['is_home'] = true;
    }

答案 3 :(得分:0)

if($this->uri->uri_string() == ''){ 
echo"You are on homepage"; 
}

答案 4 :(得分:0)

如果您没有自定义助手创建一个;否则,在任何自定义帮助文件中,只需粘贴以下任何代码段,您就可以在Codeigniter中的任何位置使用is_home()

function is_home()
{
   $CI =& get_instance();
   return (!$CI->uri->segment(1))? TRUE: FALSE;
}

OR

function is_home()
{
  $CI =& get_instance();
  return (strtolower($CI->router->fetch_class()) === $CI->router->default_controller  && $CI->router->fetch_method() === 'index') ? true : false;
}

答案 5 :(得分:0)

为获得更好的答案,您应该涵盖首页的两条路线:

我认为 routes.php 中存在这样的默认控制器:

$route['default_controller'] = 'home';
  • 您的主页没有默认控制器名称(例如: yoursite.com)
  • 您的主页具有控制器名称(例如: yoursite.com/home)

    if(!$this->uri->segment(1) || $this->uri->segment(1)=='home'){ 
        // YOU ARE ON THE HOME
    }