【问题标题】:Yii framework custom headersYii 框架自定义头文件
【发布时间】:2011-06-05 03:17:55
【问题描述】:

我希望我的登录页面和我的 web 应用程序中的所有其他页面使用不同的标题。最好的方法是什么?

据我了解,页眉和页脚是从 view/layouts/main.php 加载的,在我的情况下,因为我使用的是主题,所以它是从 theme/new/views/layouts/main 加载的。 php

现在我希望我的所有页面的标题部分(登陆页面除外)使用“main.php”中定义的标题部分,但是登陆页面应该有不同的标题。我该怎么做?我应该使用渲染部分吗?而且我是 Yii 新手,我该怎么做呢?

我是否也可以使用其他布局文件之一,column1.php 或 column2.php?怎么做?

我不是在这里寻找广泛的牵手。我只需要提醒一下,人们是如何实现类似功能的。

【问题讨论】:

  • 自己解决了这个问题 1. 创建一个不同的布局(我在登录页面上使用) - 调用它 front.php 2. 在我想要不同布局的页面的控制器中( Homepage ,所以在 SiteController actionIndex 中)。我添加了这个 $this->layout='//layouts/front';

标签: php templates yii


【解决方案1】:

这部分取决于标题在您的方法方面会有多大的不同。如果您希望它们完全分开,您可以使用额外的布局文件与 main.php 结合使用或代替它。

您在控制器类的开头设置布局文件,如下所示:

public $layout='//layouts/column2';

这将为控制器设置默认布局。您可以更改操作函数中的值或评估“beforeAction”函数中的条件。

默认生成的管理页面(使用“gii”或命令行)利用这些 column1.php 和 column2.php 布局与 main.php 并提供一个体面的示例来了解它们是如何工作的。只需将您想要自定义的内容移出 main.php 并将其放入单独的布局文件中。如果您还在分享内容,您可以将分享的内容留在 main.php 中。

如果只是更改一些属性的问题,您可以使用$this->getAction()->getId() 获取操作名称并使用它来更改布局中加载的内容,例如某个 css 或 js 文件。您想在控制器中执行的任何复杂逻辑。

对于导航栏或类似的东西,您还可以根据您在控制器中设置的环境变量使用includerenderPartial

【讨论】:

    【解决方案2】:

    我通常会创建一个像 HeaderWidget 这样的小部件,其中包含很少的视图文件并包含在主布局中。在控制器或动作中定义必要的标题视图文件并将它们传递给小部件。

    在基本控制器中,您可以定义属性 public $headerName = 'defaultHeaderView' 并且设定值取决于一些条件。

    当然,您需要创建 BController 扩展 CController 并且所有其他控制器都从您的 BController 扩展

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 2021-09-12
      • 2022-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多