视图位于一个与控制器同名的目录中。
├── plugins
| └── acme
| └── blog
| ├── controllers
| | ├── users ← 视图目录
| | | ├── _partial.php ← 局部文件
| | | └── index.php ← 视图文件
| | └── Users.php ← 控制器类
| └── Plugin.php
后端局部视图是扩展名为 php 的文件 它们位于 控制器视图 目录中。局部视图文件名应该以下划线开头: _partial.php。局部视图可以从后端页面或另一个局部视图渲染。使用控制器的 makePartial 方法来渲染一个局部视图。该方法接受两个参数 - 局部视图名称和要传递给局部视图的可选变量数组。示例:
<?= $this->makePartial('sidebar', ['showHeader' => true]) ?>您可以在后端渲染信息面板,称为提示,用户可以隐藏。
第一个参数应该是一个唯一的键,用于记住提示是否已被隐藏。
第二个参数是对一个局部视图的引用。
第三个参数可以是一些额外的视图变量,用于传递给该局部视图,此外还包括一些提示属性。
<?= $this->makeHintPartial('my_hint_key', 'my_hint_partial', ['foo' => 'bar']) ?>您还可以通过将键值设置为 null 值来禁用隐藏提示的功能。此提示将始终显示:
<?= $this->makeHintPartial(null, 'my_hint_partial') ?>以下属性可用:
| Property | Description |
|---|---|
| type | Sets the color of the hint, supported types: danger, info, success, warning. Default: info. |
| title | Adds a title section to the hint. |
| subtitle | In addition to the title, adds a second line to the title section. |
| icon | In addition to the title, adds an icon to the title section. |
如果您正在使用提示,您可能会发现检查用户是否已隐藏它们很有用。这可以通过使用 isBackendHintHidden 方法轻松完成。它接受一个参数,该参数是您在最初调用 makeHintPartial 时指定的唯一键。如果提示被隐藏,该方法将返回真,否则返回假:
<?php if ($this->isBackendHintHidden('my_hint_key')): ?>
<!-- Do something when the hint is hidden -->
<?php endif ?>后端布局位于插件的一个可选的 layouts/ 目录中. 一个自定义布局通过控制器对象的 $layout 属性设置. 它默认为名为 default 的系统布局.
/**
* @var string layout to use for the view.
*/
public $layout = 'mycustomlayout';布局也提供了将自定义 CSS 类附加到 BODY 标签的选项。这可以通过控制器的 $bodyClass 属性来设置。
/**
* @var string bodyClass (CSS) to add to the layout.
*/
public $bodyClass = 'compact-container';这些主体类适用于默认布局:
布局也可以像局部视图一样使用,更像是一个全局局部视图。系统提供了一个称为 form-with-sidebar 的例子,并展示了一种实现子布局结构的新颖方式。
在使用此布局样式之前,请确保您的控制器使用 body 类 compact-container 通过在您的控制器的动作方法或构造函数中设置它。
$this->bodyClass = 'compact-container';此布局使用两个占位符,一个名为 form-contents 的主要内容区域以及一个名为 form-sidebar 的补充侧边栏。示例如下:
<!-- Primary content -->
<?php Block::put('form-contents') ?>
Main content
<?php Block::endPut() ?>
<!-- Complimentary sidebar -->
<?php Block::put('form-sidebar') ?>
Side content
<?php Block::endPut() ?>
<!-- Layout execution -->
<?php Block::put('body') ?>
<?= Form::open(['class'=>'layout stretch']) ?>
<?= $this->makeLayout('form-with-sidebar') ?>
<?= Form::close() ?>
<?php Block::endPut() ?>布局在最后部分执行,通过覆盖每个后端布局使用的 body 占位符。它使用一个 <form /> HTML 标签包裹所有内容,并渲染名为 form-with-sidebar 的子布局。此文件位于 modules/backend/layouts/form-with-sidebar.php。
该 fireViewEvent 用于多个区域以 扩展后端区域。该 backend.layout.extendHead 事件可用于扩展布局的 head 元素。返回值应包含要包含的标记。以下内容会将一个 JavaScript 文件添加到每个后端页面。
Event::listen('backend.layout.extendHead', function ($controller) {
return '<script src="/app/assets/js/myscript.js"></script>';
});控制器作为(第一个参数)可用于事件,这可以用于定位特定的控制器。以下内容仅向定制条目控制器添加特定的CSS样式。
Event::listen('backend.layout.extendHead', function ($controller) {
if ($controller instanceof \Tailor\Controllers\Entries) {
return '<styles> /* ... */ </styles>';
}
});