我知道 Wordpress 具有is_home()
功能来确定主页
在 YII 中,我使用这样的解决方案Yii check if homepage
在 CI 中,模板实际上,我曾多次面对它。例如,在标记<body>
中添加一些css类。
我找到的所有http://ellislab.com/forums/viewthread/194637/#916899
任何人都可以帮助我或编写自己的解决方案吗?
提前感谢
答案 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/home)
if(!$this->uri->segment(1) || $this->uri->segment(1)=='home'){
// YOU ARE ON THE HOME
}