如何使用YII检查当前页面是否为frontpage?
Drupal有一个名为“”的函数。YII是否有类似的方式来处理导航 以我的经验,Yii中没有这样的功能。但是,您可以检索以下内容:如何使用YII检查当前页面是否为frontpage?,yii,Yii,Drupal有一个名为“”的函数。YII是否有类似的方式来处理导航 以我的经验,Yii中没有这样的功能。但是,您可以检索以下内容: 基本url:Yii::app()->request->baseUrl 当前URL:Yii::app()->request->requestUri。 当前页面控制器具有Yii::app()->getController()->getAction()->controller->id 有了这些API,应该可以确定当前页面是否是头版。根据我的经验,Yii中没有这样的功能
- 基本url:
Yii::app()->request->baseUrl
- 当前URL:
Yii::app()->request->requestUri。
- 当前页面控制器具有
李>Yii::app()->getController()->getAction()->controller->id
有了这些API,应该可以确定当前页面是否是头版。根据我的经验,Yii中没有这样的功能。但是,您可以检索以下内容:
- 基本url:
Yii::app()->request->baseUrl
- 当前URL:
Yii::app()->request->requestUri。
- 当前页面控制器具有
李>Yii::app()->getController()->getAction()->controller->id
使用这些API,应该可以确定当前页面是否是头版。不幸的是,不是。虽然拼凑这些数据所需的信息是可用的,但这样做确实比应该的更痛苦 首先,首页是由属性定义的,该属性可以在最终指南中进行配置。但这里有一个大问题:
defaultController
实际上可以是以下任何一种:
站点
模块/站点
站点/索引
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当然已经包含了可以做到这一点的代码:该方法可以接受defaultController
的任何有效格式,并将其解析为控制器/动作对(如果适用,控制器依赖于模块)。但是看着来源并不能让你期待地微笑
总而言之:您可以假设defaultController
始终是完全指定的,并使用一行代码完成任务,或者从createController
借用代码来确定defaultController
指向的确切位置(然后使用这一行代码检查是否相等)
我不建议研究基于URL的解决方案,因为路由的全部意义在于不同的URL可以指向相同的内容——如果你这样做,就永远无法确保你得到了正确的结果。不幸的是,没有。虽然拼凑这些数据所需的信息是可用的,但这样做确实比应该的更痛苦 首先,首页是由属性定义的,该属性可以在最终指南中进行配置。但这里有一个大问题:
defaultController
实际上可以是以下任何一种:
站点
模块/站点
站点/索引
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当然已经包含了可以做到这一点的代码:该方法可以接受defaultController
的任何有效格式,并将其解析为控制器/动作对(如果适用,控制器依赖于模块)。但是看着来源并不能让你期待地微笑
总而言之:您可以假设defaultController
始终是完全指定的,并使用一行代码完成任务,或者从createController
借用代码来确定defaultController
指向的确切位置(然后使用这一行代码检查是否相等)
我不建议研究基于URL的解决方案,因为路由的全部意义在于不同的URL可以指向相同的内容——如果你这样做,就永远无法确保你得到了正确的结果。另一个简单的想法:
在您的操作(用于显示“主页面”)中,您可以在其视图中使用脚本设置变量:
Yii::app()->getClientScript()->registerScript("main_screen",
"var main_front_page = true;",CClientScript::POS_BEGIN);
将该代码放在“主视图”中(其余视图页面没有这段代码)。
因此,当您需要检查某个页面是否为“主页面”时,可以使用javascript检查该页面,查询:
if(main_front_page){..do something..}.
如果您需要识别php中的主页(在服务器端),请使用Jon提出的方法。另一个简单的想法:
在您的操作(用于显示“主页面”)中,您可以在其视图中使用脚本设置变量:
Yii::app()->getClientScript()->registerScript("main_screen",
"var main_front_page = true;",CClientScript::POS_BEGIN);
将该代码放在“主视图”中(其余视图页面没有这段代码)。
因此,当您需要检查某个页面是否为“主页面”时,可以使用javascript检查该页面,查询:
if(main_front_page){..do something..}.
如果需要识别php中的主页(在服务器端),请使用Jon提出的方法。另一种解决方案,基于控制器的常用方法: 您的控制器所有这些控制器都必须从CController扩展,