主题定义了October构建的网站或Web应用程序的外观。主题完全基于文件定义,可以使用任何版本控制软件管理。
主题存储在项目的themes目录的对应子目录中。主要包含以下部分:
名称 Description
Pages 网站的页面
Partials 可以重用的HTML标记块
Layouts 定义页面的结构
Cont
Pages:页面;网站页面的内容由Page模板定义。模板文件位置:themes/theme_name/pages目录下。页面文件的扩展名为htm。文档结构中,Configuration(配置)和Twig Markup(标记)部分是必须的,PHP代码部分是可选的。
最简单的例子
url = "/" == <h1>Hello, world!</h1>
页面配置
partials 我们这里简称【部件】,是可以重复使用的Twig标记块。可以用于网站的任何位置。比如页眉页脚或者其他Ajax内容。
partials模板文件存储在模板目录的partials子目录中。扩展名是htm。最简单的例子:
<p>This is a partial</p>
partials 的配置部分是可选的,其中可选参数description,用于给后端
Layout,此处称为布局。定义了一个页面框架,即页面上的所有的重复的内容,例如header部分和footer部分。Layout通常包含HTML标签、HEAD标签、TITLE标签和BODY标签。
位置:安装的主题的目录,layout子目录中。
扩展名:htm
Layout中输出内容应该使用page标签进行页面内容输出。{% page %}
;最近简单的方式:
<html> <body> {% page %} </body> </html>
Page与Layout关系,Page可以使用不同的Layout,Layout也可以通过Page来引用多个page页面。但是,他们之间建立联系的是Page中的设置,然后Layout中的{% page %}
才能正确的引用这个page,才可以通过Page的URL结合Layout布局把页面显示出来。
要为一个Page使用Layout,Page的Configuration Section部分必须引用Layout文件名称(不带扩展名)。请记住,如果从子目录引用Layout,则应指定子目录名称。使用default.htm的Layout的示例页面模板:
url = "/" layout = "default" == <p>Hello, world!</p>
当请求该页面时,其内容与Layout合并,或者更确切地说 - Layout的{% page %}
标签被页面内容替换。前面的示例会生成以下标记:
<html> <body> <p>Hello, world!</p> </body> </html>
请注意,您可以在Layout中渲染部件。这使您可以在不同的Layout之间共享常用元素。例如,您可以有一个输出网站CSS和JavaScript链接的部件。这种方法简化了资源的管理。 如果你想添加一个JavaScript引用,你应该修改一个小部件,而不是编辑所有的Layout。
布局中的配置区域是可选的,支持name和description。
description = "Basic layout example" == <html> <body> {% page %} </body> </html>
Placeholders这里称为【占位符】,
Content Blocks 这里我们称为内容块。内容块是可以编辑的文本、HTML代码或者Markdown块。主要用来保存静态内容,并支持基本的模板变量。与Partial(部件)相比,部件则更加灵活,一般用于生成动态内容。
内容块存储在主题目录的content子目录中。
支持以下扩展名的文件:
Extension Description
htm 使用HTML标记语言
txt 使用纯文本语言
md 使用Markdown语法
这些扩展名决定了在后端系统界面中的编辑及显示方式。也决定了在网站前端的显示方式。Markdown块在显示之前会转换为HTML格式再显示。
使用{% content 'file.htm' %}
标签在Page、Partial 或 Layout 中渲染内容块。
渲染Content Blocks的页面示例:
url = "/contacts" == <div class="contacts"> {% content 'contacts.htm' %} </div>
内容块不支持Twig标记,但是支持基本的变量,可以通过变量传递值给内容块。
{% content 'welcome.htm' name='John' %}
在Content Blocks中,可以使用单个大括号 { }
访问变量:
<h1>This is a demo for {name}</h1>
可以使用该View::share
方法注册一个全局变量,可用于所有Content Blocks。
View::share('site_name', 'OctoberCMS');
这段代码可以在 插件注册文件 的注册或启动方法中调用。使用上面的例子,变量{site_name}
将在所有Content Blocks中可用。
Components这里我们称之为组件。
组件是可以配置的构建元素。可以附加到Pages(页面)、Layouts(布局)、Partials(部件)中。组件是October的核心特性。每个组件都可以对网站的功能进行扩展。组件可以在页面上输出HTML代码,但是这不是主要的,组件的一个重要功能是处理Ajax请求、处理表单提交回调,处理页面执行周期。允许向页面注入变量或者实现网站安全性。
启用组件,如果是后端管理系统中,可以选择组件面板,将组件拖动添加到页面、部件和布局中。如果是采用文本编辑模式,则可以将组件的对应模板的名称添加到对应的模板的配置部分。比如:下面的例子演示了如何将todolist组件添加到页面中。
title = "Components demonstration" url = "/components" [demoTodo] maxItems = 20 == ...
当您引用Components时,它会自动创建一个与Components名称匹配的Page变量(在前面的示例中为demoTodo)。提供HTML标记的Components可以使用标记在Page上呈现{% component %}
,如下所示:
{% component 'demoTodo' %}
如果具有相同名称的两个组件分配给Page和Layout,Page中的组件将覆盖布局中的组件。
如果有两个注册Components的名称相同,则可以使用完全限定的名称引用组件,并为其指定一个别名:
[October\Demo\Components\Todo demoTodoAlias] maxItems = 20
第一个参数是类名,第二个参数是注入到Page时使用的组件的别名。如果您指定了组件的别名,那么在引用组件时,可以页面代码中的任何地方使用。下一个示例引用Components别名:
{% component 'demoTodoAlias' %}
允许给同一个组件定义多个别名,以实现在同一个页面上使用一个组件的多个实例
。
[demoTodo todoA] maxItems = 10 [demoTodo todoB] maxItems = 20
默认情况下,属性值在定义组件的配置部分会进行初始化,这时候属性值是静态的,如下所示:
[demoTodo] maxItems = 20