2012-11-14 66 views

回答

2

不幸的不是。尽管将这些信息拼凑在一起所需的信息是可用的,但这样做实际上比应该更痛苦。

开始时,首页由CWebApplication::defaultController属性定义,该属性可以在权威指南中配置为discussed。但是这里有一个大问题:defaultController实际上可以是以下任何一种:

  1. 一个空的控制器名称,例如, site
  2. 模块/控制器对,例如, module/site
  3. 控制器/动作对,例如, site/index
  4. 模块/控制器/动作元组,例如, module/site/index

如果您所指定的defaultController为#4(这是一样的#3,如果你的应用程序不包含任何模块),那么一切都很简单:

function is_home_page() { 
    $app = Yii::app(); 
    return $app->controller->route == $app->defaultController; 
} 

的问题是,如果defaultController被指定为#1或#2,那么您必须检查大量运行时信息以将其转换为形式#3或#4(如适用),以便您可以运行相等性检查。

当然的Yii已经包含的代码,可以做到这一点:在CWebApplication::createController方法,它可以接受任何的有效格式defaultController并解决给控制器/动作对(其中,控制器是依赖于模块上,如果适用的话) 。但看着源头不会让你在预期中微笑。

概括起来:你可以认为defaultController总是被完全指定和落榜用一行代码完成,或者从createController借用代码,以确定到底是什么defaultController点(然后用一条线的代码来检查是否相等)。

我不建议考虑根据URL解决方案,因为路线的整点是不同的URL可以指向相同的内容 - 如果你走那条路,不能确保你有正确的结果。

+0

谢谢!我最终使用 - > ... if((Yii :: app() - > controller-> getId()。'/'。Yii :: app() - > controller-> getAction() - > getId ))=='site/index'){... – coderama

+0

是的,我同意理解这个目的很重要,但是对于一个简单的if($ frontpage)场景,上面的工作很好。 – coderama

+0

@RD .:如果你没有使用模块,'Yii :: app() - > controller-> route'将与你的条件的左边相同。更易于阅读。 – Jon

1

根据我的经验,Yii没有这样的功能。但是,您可以检索如下:

  • 基地网址:Yii::app()->request->baseUrl
  • 当前网址:Yii::app()->request->requestUri.
  • 当前页面控制器Yii::app()->getController()->getAction()->controller->id

有了这些API,应该有可能找出当前页面是否是首页。

0

另一个简单的想法:

在你的行动(即一个你用它来展示你的主要头版“),您可以设置它认为使用脚本变量

Yii::app()->getClientScript()->registerScript("main_screen", 
    "var main_front_page = true;",CClientScript::POS_BEGIN); 

将该代码放在“主视图”中,(其余视图页面没有这段代码)。 所以当你需要检查,如果一个页面是“主页”,你可以检查使用javascript它,quering为:

if(main_front_page){..do something..}. 

,如果你需要认识到在PHP主页(在服务器端)使用Jon提出的方法。

0

另一种解决方案的基础上,为控制器的常用方法:

你的控制器,所有的人都必须从CController延伸,但是,当你建立一个新的新鲜Yii应用GII上创建/保护/组件的基本控制器/Controller.php所以你的所有控制器都是从它派生出来的。

所以,穿上它的主属性,命名为:

<?php 
class Controller extends CController { 
    public $is_main_front_page; 
    public function setMainFrontPage(){ $this->is_main_front_page = true; } 
    public function getIsMainFrontPage(){ returns $this->is_main_front_page==true; } 
} 
?> 

好,当你呈现你的主要头版行动,成立这个核心varible为真:未来

<?php 
class YoursController extends Controller { 
    public function actionPrimaryPage(){ 
     $this->setMainFrontPage(); 
     $this->render('primarypage'); 
    } 
    public function actionSecondaryPage(){ 
     $this->render('secondarypage'); 
    } 
} 

,在任何看法,你可以检查它:

<?php // views/yours/primaryview.php 
    echo "<h1>Main Page</h1>"; 
    echo "is primary ? ".$this->getIsMainFrontPage(); // must say: "is primary ? true" 
?> 

<?php // views/yours/secondaryview.php 
    echo "<h1>Secondary Page</h1>"; 
    echo "is primary ? ".$this->getIsMainFrontPage(); // must say: "is primary ? false" 
?> 
相关问题