[TOC]
## **介绍**
主题定义了使用October构建的网站或Web应用程序的外观。October主题完全基于文件,可以使用任何版本控制系统进行管理,例如Git。此页面为您提供October主题的高级描述。您可以在相应的文章中找到有关[页面](1073311),[部件](1073832),[布局](1073833)和[内容文件的](1073834)更多详细信息。
主题是默认情况下驻留在**/ themes**目录中的目录。主题可以包含以下对象:
| 对象 | 描述 |
| --- | --- |
| [页面](1073311) | 代表网站页面。 |
| [部件](1073832) | 包含可重复使用的HTML标记块。 |
| [布局](1073833) | 定义页面脚手架。 |
| [内容文件](1073833) | 可以与页面或布局分开编辑的文本,HTML或[Markdown](http://daringfireball.net/projects/markdown/syntax)块。 |
| **资源文件** | 是图像,CSS和JavaScript文件等资源文件。 |
## **目录结构**
您可以在下面看到一个示例主题目录结构。每个October主题用一个单独的目录表示,通常一个激活的主题用于显示网站。此示例显示“网站”主题目录。
~~~
themes/
website/ <=== Theme starts here
pages/ <=== Pages directory
home.htm
layouts/ <=== Layouts directory
default.htm
partials/ <=== Partials directory
sidebar.htm
content/ <=== Content directory
intro.htm
assets/ <=== Assets directory
css/
my-styles.css
js/
images/
~~~
> 激活主题使用文件中的`activeTheme`参数`config/cms.php`或系统> CMS>前端主题后端页面上的主题选择器进行设置。使用主题选择器设置的主题会覆盖`config/cms.php`文件中的值。
### **子目录**
October支持页面,部件,布局和内容文件的单级子目录(**assets**目录可以具有任何结构)。这简化了组织大型网站的过程。在下面的示例目录结构中,您可以看到pages和partials目录包含**blog**子目录,而content目录包含**home**子目录。
~~~
themes/
website/
pages/
home.htm
blog/ <=== Subdirectory
archive.htm
category.htm
partials/
sidebar.htm
blog/ <=== Subdirectory
category-list.htm
content/
footer-contacts.txt
home/ <=== Subdirectory
intro.htm
...
~~~
要从子目录引用部分文件或内容文件,请在模板名称前指定子目录名称。从子目录渲染部分的示例:
~~~
{% partial "blog/category-list" %}
~~~
> **注意:**模板路径始终是绝对路径。如果在某个部件中,您从同一子目录中呈现另一个部件,则仍需要指定子目录名称。
## **模板结构**
页面,部件和布局模板最多可包含3个部分:**配置**,**PHP代码**和**Twig标记**。部分用`==`序列分开。例如:
~~~
url = "/blog"
layout = "default"
==
function onStart()
{
$this['posts'] = ...;
}
==
<h3>Blog archive</h3>
{% for post in posts %}
<h4>{{ post.title }}</h4>
{{ post.content }}
{% endfor %}
~~~
### **配置部分**
配置部分设置模板参数。支持的配置参数特定于不同的CMS模板,并在相应的文档文章中进行了描述。配置部分使用简单的[INI格式](http://en.wikipedia.org/wiki/INI_file),其中字符串参数值包含在引号内。页面模板的示例配置部分:
~~~
url = "/blog"
layout = "default"
[component]
parameter = "value"
~~~
### **PHP代码部分**
每次渲染模板之前,PHP部分中的代码都会执行。对于所有CMS模板,PHP部分是可选的,其内容取决于定义它的模板类型。PHP代码部分可以包含可选的打开和关闭PHP标记,以在文本编辑器中启用语法突出显示。应始终在节分隔符的另一行上指定打开和关闭标记`==`。
~~~
url = "/blog"
layout = "default"
==
<?
function onStart()
{
$this['posts'] = ...;
}
?>
==
<h3>Blog archive</h3>
{% for post in posts %}
<h4>{{ post.title }}</h4>
{{ post.content }}
{% endfor %}
~~~
在PHP部分中,您只能定义函数并使用PHP`use`关键字引用名称空间。PHP部分中不允许其他PHP代码。这是因为在解析页面时PHP部分将转换为PHP类。使用命名空间引用的示例:
~~~
url = "/blog"
layout = "default"
==
<?
use Acme\Blog\Classes\Post;
function onStart()
{
$this['posts'] = Post::get();
}
?>
==
~~~
作为设置变量的一般方法,您应该使用数组访问方法`$this`,尽管为了简单起见,您可以将**对象访问用作只读**,例如:
~~~
// Write via array
$this['foo'] = 'bar';
// Read via array
echo $this['foo'];
// Read-only via object
echo $this->foo;
~~~
### **Twig标记部分**
Twig部分定义了模板要呈现的标记。在Twig部分,您可以使用[October提供的](#666)函数,标记和过滤器,所有本[机Twig功能](http://twig.sensiolabs.org/documentation)或[插件提供的](1074009#Twig_9)功能。Twig部分的内容取决于模板类型(页面,布局或部分)。您可以在文档中找到有关特定Twig对象的更多信息。
可以[在标记指南中](#666)找到更多信息。
## **主题日志**
OctoberCMS附带了一个非常有用的功能,默认情况下禁用,称为主题记录。
由于布局和页面将大部分数据存储在平面文件中,因此您或您的客户可能会意外丢失内容。例如,切换页面的布局将修改页面的支架,因此导致数据丢失。
要启用主题日志记录,只需转到**设置 - >日志设置**并启用**日志主题更改**。现在记录所有更改。
可以在**“设置” - >“主题日志”中**查看主题更改**日志**。每次更改都会概述已添加/删除的内容,以及之前和之后已更改文件的副本。如有必要,您可以使用此信息来确定还原更改的相应操作。
- 安装程序
- 安装
- 配置
- CMS
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 标记指南
- AJAX
- 介绍
- 事件处理
- 更新部件
- 数据属性API
- JavaScript API
- 额外特征
- 主题
- 开发主题
- 插件
- 注册
- 版本
- 使用Composer
- 构建组件
- 设置和配置
- 本地化
- 任务调度
- 扩展插件
- 后台
- 控制器和AJAX
- 视图和部件
- 小工具
- 表单
- 列表
- 关联
- 重新排序
- 导入导出
- 用户和权限
- 用户界面指南
- 数据库
- 基本用法
- 结构
- 查询构造器
- 模型
- 关联
- 附件
- 集合
- 访问器和修改器
- 序列化
- 特性
- 行为
- 服务
- 应用
- 行为
- 缓存
- 集合
- 错误&日志
- 事件
- 表单&HTML
- 文件系统/CDN
- 哈希&加密
- 助手函数
- 邮件
- 分页
- 分析器
- 队列
- 请求&输入
- 响应&视图
- 路由
- Session
- 验证
- 控制台
- 命令
- 脚手架
- 开发
- API文档
- 附录
- 单元测试
- 质量指南
- 开发指南