2012-11-14 68 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" 
?> 
相關問題