Yii 布局
布局代表多个视图的公共部分,例如页面的页眉和页脚。默认情况下,布局应该存储在 views/layouts 文件夹中。
让我们来看一下基本应用模板的主要布局
这个布局生成了所有页面共享的HTML页面。 $content 变量是内容视图的渲染结果。以下方法触发有关渲染过程的事件,以便其他位置注册的脚本和标签能适当地注入-
- head() - 应该在head部分中调用。生成一个占位符,它将被替换为指向head位置的已注册HTML。
-
beginBody() - 应该在body部分开始处调用。触发 EVENT_BEGIN_BODY 事件。生成一个占位符,它将被替换为指向body开始位置的已注册HTML。
-
endBody() - 应该在body部分结束处调用。触发 EVENT_END_BODY 事件。生成一个占位符,它将被替换为指向body结束位置的已注册HTML。
-
beginPage() - 应该在布局开始处调用。触发 EVENT_BEGIN_PAGE 事件。
-
endPage() - 应该在布局结束处调用。触发 EVENT_END_PAGE 事件。
创建布局
步骤1 - 在views/layouts目录下,创建一个名为 newlayout.php 的文件,并添加以下代码。
我们已经移除了顶部菜单栏。
步骤2 - 要将此布局应用于 SiteController 类,请将 $layout 属性添加到 SiteController 类中。
步骤3 − 现在,如果你在SiteController的任何视图中打开web浏览器,你会发现布局已经改变了。
步骤4 - 要注册各种元标记,可以在内容视图中调用 yii\web\View::registerMetaTag() 。
步骤5 - 修改 SiteController 的 ‘About’ 视图。
我们刚刚注册了两个元标签 − 关键词和描述 。
步骤6 − 现在转到 http://localhost:8080/index.php?r=site/about, 您会在页面的头部找到元标签,如下图所示。
视图会触发几个事件 −
- EVENT_BEGIN_BODY − 在布局中通过调用 yii\web\View::beginBody() 时触发。
-
EVENT_END_BODY − 在布局中通过调用 yii\web\View::endBody() 时触发。
-
EVENT_BEGIN_PAGE − 在布局中通过调用 yii\web\View::beginPage() 时触发。
-
EVENT_END_PAGE − 在布局中通过调用 yii\web\View::endPage() 时触发。
-
EVENT_BEFORE_RENDER − 在控制器渲染文件之前触发。
-
EVENT_AFTER_RENDER − 在文件渲染之后触发。
您可以对这些事件做出响应,将内容嵌入视图中。
步骤7 − 为了在 SiteController 的 actionAbout 中显示当前日期和时间,可以进行如下修改。
步骤8 - 在Web浏览器的地址栏中输入 http://localhost:8080/index.php?r=site/about ,您将看到以下内容。
重点注意事项
为了使视图更易管理,您应该:-
- 将复杂视图分成几个较小的视图。
- 使用布局来管理常见的HTML部分(标题、页脚、菜单等)。
- 使用小部件。
视图应该:-
- 包含HTML和简单的PHP代码来格式化和呈现数据。
- 不处理请求。
- 不修改模型属性。
- 不执行数据库查询。