ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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附带了一个非常有用的功能,默认情况下禁用,称为主题记录。 由于布局和页面将大部分数据存储在平面文件中,因此您或您的客户可能会意外丢失内容。例如,切换页面的布局将修改页面的支架,因此导致数据丢失。 要启用主题日志记录,只需转到**设置 - >日志设置**并启用**日志主题更改**。现在记录所有更改。 可以在**“设置” - >“主题日志”中**查看主题更改**日志**。每次更改都会概述已添加/删除的内容,以及之前和之后已更改文件的副本。如有必要,您可以使用此信息来确定还原更改的相应操作。