Drupal有一个叫做“drupal_is_front_page”的功能。 YII有类似的方式来处理导航吗?如何使用YII检查当前页面是否为首页?
回答
不幸的不是。尽管将这些信息拼凑在一起所需的信息是可用的,但这样做实际上比应该更痛苦。
开始时,首页由CWebApplication::defaultController
属性定义,该属性可以在权威指南中配置为discussed。但是这里有一个大问题:defaultController
实际上可以是以下任何一种:
- 一个空的控制器名称,例如,
site
- 模块/控制器对,例如,
module/site
- 控制器/动作对,例如,
site/index
- 模块/控制器/动作元组,例如,
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可以指向相同的内容 - 如果你走那条路,不能确保你有正确的结果。
根据我的经验,Yii没有这样的功能。但是,您可以检索如下:
- 基地网址:
Yii::app()->request->baseUrl
- 当前网址:
Yii::app()->request->requestUri.
- 当前页面控制器
Yii::app()->getController()->getAction()->controller->id
。
有了这些API,应该有可能找出当前页面是否是首页。
另一个简单的想法:
在你的行动(即一个你用它来展示你的主要头版“),您可以设置它认为使用脚本变量:
Yii::app()->getClientScript()->registerScript("main_screen",
"var main_front_page = true;",CClientScript::POS_BEGIN);
将该代码放在“主视图”中,(其余视图页面没有这段代码)。 所以当你需要检查,如果一个页面是“主页”,你可以检查使用javascript它,quering为:
if(main_front_page){..do something..}.
,如果你需要认识到在PHP主页(在服务器端)使用Jon提出的方法。
另一种解决方案的基础上,为控制器的常用方法:
你的控制器,所有的人都必须从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"
?>
- 1. 如何检查当前页面是否是Ionic2的主页?
- 2. 检查当前页面是否为WordPress的作者页面
- 3. jquery检查所选页面是否为当前页面
- 4. 如何检查当前页面是否在ASP.Net中使用SSL?
- 5. 检查当前页面是否是wordpress中的分类页面?
- 6. 检查当前页面是否为Jekyll上的主页
- 7. mediawiki:检查当前页面是否被删除页面
- 8. Windows 10开发:如何检查当前页面是否是特定页面?
- 9. 将当前页面设置为首页
- 10. 如何区分当前页面是否为EPiServer页面
- 11. MediaWiki自定义皮肤:检查当前页面是否为主页面
- 12. vBulletin检查当前页面是否为usercp.php?
- 13. 如何检查当前Facebook用户是否喜欢使用PHP SDK的页面?
- 14. WordPress的:检查当前页面之前或之后是否有兄弟页面?
- 15. 如何检查它是否是主页/首页?
- 16. 如何检查当前页面是否是wordpress中的插件管理面板
- 17. shopify我需要检查当前页面是否为收集页面而不是单个产品页面
- 18. Umbraco:检查当前页面是否为带有id或名称为'xxx'的页面的子页面
- 19. PunBB检查它是否是首页
- 20. 检查当前页面是否是索引中的索引
- 21. 如何使用MySQL检查页面是否为空?
- 22. 如何检查页面是否存在?
- 23. yii检查用户是否被重定向到登录页面
- 24. 如何使用Yii的CActiveDataProvider设置当前页面?
- 25. 即使当CausesValidation为false时,检查页面是否有效
- 26. Woocommerce,如何查看当前页面是订单跟踪页面?
- 27. 离子2:如何检查当前页面是离子2中的根页面?
- 28. 如何检测AngularJS是否加载到当前页面
- 29. 检查当前页面网址是否包含某些词
- 30. 检查当前请求是否来自httpmodule中的mvc页面
你为什么要这样做?对于导航,您可以使用控制器的“菜单”属性来控制导航链接。 – Asgaroth