据我所知,Wordpress具有is_home()
确定主页的功能。
在YII我使用这样的解决方案Yii 检查主页
在CI中,模板实际上,我多次面临它的必要性。例如,在 tag 中添加一些 css 类<body>
。
我发现的所有内容http://ellislab.com/forums/viewthread/194637/#916899
任何人都可以帮助我或编写自己的解决方案吗?
预先感谢
据我所知,Wordpress具有is_home()
确定主页的功能。
在YII我使用这样的解决方案Yii 检查主页
在CI中,模板实际上,我多次面临它的必要性。例如,在 tag 中添加一些 css 类<body>
。
我发现的所有内容http://ellislab.com/forums/viewthread/194637/#916899
任何人都可以帮助我或编写自己的解决方案吗?
预先感谢
我只是想在这里添加我的答案,因为另一种方法不适用于我经过大量修改的 CI 版本。
这个片段是我用来检测我们是否在主页上的
if (!$this->uri->segment(1)) {
// We are on the homepage
}
如果需要,您可以使用$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;
这样即使页面 url 是http://yoursite.com/(假设 home controller+method 是默认的),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
and$this->router->method
代替。
if($this->uri->uri_string() == ''){
echo"You are on homepage";
}
如果您没有自定义助手,请创建一个;否则在您的任何自定义帮助程序文件中只需粘贴以下任何代码片段,您应该能够is_home()
从 Codeigniter 中的任何位置使用。
function is_home()
{
$CI =& get_instance();
return (!$CI->uri->segment(1))? TRUE: FALSE;
}
或者
function is_home()
{
$CI =& get_instance();
return (strtolower($CI->router->fetch_class()) === $CI->router->default_controller && $CI->router->fetch_method() === 'index') ? true : false;
}
为什么不简单
public function name_of_home_method()
{
$data['is_home'] = true;
}
为了获得更好的答案,您应该涵盖 2 条主页路线:
我假设在routes.php中有这样的默认控制器:
$route['default_controller'] = 'home';
带有控制器名称的主页(例如:yoursite.com/home)
if(!$this->uri->segment(1) || $this->uri->segment(1)=='home'){
// YOU ARE ON THE HOME
}