You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docs/versioned_docs/version-1.4.17/developer-guide/theme/page-variable.md

1355 lines
25 KiB

---
title: 页面变量
description: 每个页面所返回的变量
---
## 首页index.ftl
访问路径:`http://yourdomain`
### postsList
#### 语法
```html
<#list posts.content as post>
// do something
</#list>
```
#### 参数
```json
[{
"content": [{
"categories": [{
"createTime": "2020-10-13T13:23:39.143Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"slug": "string",
"thumbnail": "string"
}],
"commentCount": 0,
"createTime": "2020-10-13T13:23:39.143Z",
"disallowComment": true,
"editTime": "2020-10-13T13:23:39.143Z",
"editorType": "MARKDOWN",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaKeywords": "string",
"metas": {},
"password": "string",
"slug": "string",
"status": "PUBLISHED",
"summary": "string",
"tags": [{
"createTime": "2020-10-13T13:23:39.143Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2020-10-13T13:23:39.143Z",
"visits": 0,
"wordCount": 0
}],
"empty": true,
"first": true,
"last": true,
"number": 0,
"numberOfElements": 0,
"pageable": {
"page": 0,
"size": 0,
"sort": [
"string"
]
},
"size": 0,
"sort": {
"sort": [
"string"
]
},
"totalElements": 0,
"totalPages": 0
}]
```
#### 示例
遍历输出首页的文章:
```html
<#list posts.content as post>
<a href="${post.fullPath!}">${post.title!}</a>
</#list>
```
输出:
```html
<a href="http://localhost:8090/archives/url1">title1</a>
<a href="http://localhost:8090/archives/url2">title2</a>
<a href="http://localhost:8090/archives/url3">title3</a>
```
## 文章页面post.ftl
访问路径不固定,视固定链接配置而定,目前可以配置的有:
- `http://yourdomain/archives/{slug}`(默认)
- `http://yourdomain/1970/01/{slug}`
- `http://yourdomain/1970/01/01/{slug}`
- `http://yourdomain/?p={id}`
- `http://yourdomain/archives/{id}`
### postObject
#### 语法
```html
${post.attribute}
```
attribute 代表具体属性。
#### 参数
```json
{
"categories": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"password": "string",
"slug": "string",
"thumbnail": "string"
}
],
"categoryIds": [
0
],
"commentCount": 0,
"createTime": "2021-02-25T13:15:58.589Z",
"disallowComment": true,
"editTime": "2021-02-25T13:15:58.589Z",
"editorType": "MARKDOWN",
"formatContent": "string",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaIds": [
0
],
"metaKeywords": "string",
"metas": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"id": 0,
"key": "string",
"postId": 0,
"value": "string"
}
],
"originalContent": "string",
"password": "string",
"slug": "string",
"status": "DRAFT",
"summary": "string",
"tagIds": [
0
],
"tags": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}
],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2021-02-25T13:15:58.589Z",
"visits": 0,
"wordCount": 0
}
```
#### 示例
获取文章标题:
```html
<span>${post.title!}</span>
```
输出:
```html
<span>示例文章</span>
```
### prevPostObject
#### 语法
```html
${prevPost.attribute}
```
attribute 代表具体属性。
#### 参数
```json
{
"categories": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"password": "string",
"slug": "string",
"thumbnail": "string"
}
],
"categoryIds": [
0
],
"commentCount": 0,
"createTime": "2021-02-25T13:15:58.589Z",
"disallowComment": true,
"editTime": "2021-02-25T13:15:58.589Z",
"editorType": "MARKDOWN",
"formatContent": "string",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaIds": [
0
],
"metaKeywords": "string",
"metas": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"id": 0,
"key": "string",
"postId": 0,
"value": "string"
}
],
"originalContent": "string",
"password": "string",
"slug": "string",
"status": "DRAFT",
"summary": "string",
"tagIds": [
0
],
"tags": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}
],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2021-02-25T13:15:58.589Z",
"visits": 0,
"wordCount": 0
}
```
#### 示例
获取上一篇文章的信息:
```html
<#if prevPost??>
<a href="${prevPost.fullPath!}">上一篇:${prevPost.title!}</a>
</#if>
```
输出:
```html
<a href="http://localhost:8090/archives/url1">上一篇title1</a>
```
### nextPostObject
#### 语法
```html
${nextPost.attribute}
```
attribute 代表具体属性。
#### 参数
```json
{
"categories": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"password": "string",
"slug": "string",
"thumbnail": "string"
}
],
"categoryIds": [
0
],
"commentCount": 0,
"createTime": "2021-02-25T13:15:58.589Z",
"disallowComment": true,
"editTime": "2021-02-25T13:15:58.589Z",
"editorType": "MARKDOWN",
"formatContent": "string",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaIds": [
0
],
"metaKeywords": "string",
"metas": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"id": 0,
"key": "string",
"postId": 0,
"value": "string"
}
],
"originalContent": "string",
"password": "string",
"slug": "string",
"status": "DRAFT",
"summary": "string",
"tagIds": [
0
],
"tags": [
{
"createTime": "2021-02-25T13:15:58.589Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}
],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2021-02-25T13:15:58.589Z",
"visits": 0,
"wordCount": 0
}
```
#### 示例
获取下一篇文章的信息:
```html
<#if nextPost??>
<a href="${nextPost.fullPath!}">下一篇:${nextPost.title!}</a>
</#if>
```
输出:
```html
<a href="http://localhost:8090/archives/url3">下一篇title3</a>
```
### categoriesList
#### 语法
```html
<#list categories as category>
// do something
</#list>
```
#### 参数
```json
[{
"createTime": "2021-02-25T13:32:11.189Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"password": "string",
"slug": "string",
"thumbnail": "string"
}]
```
#### 示例
获取文章的分类列表:
```html
<#list categories as category>
<a href="${category.fullPath!}">${category.name!}</a>
</#list>
```
输出:
```html
<a href="http://localhost:8090/categories/url1">name1</a>
<a href="http://localhost:8090/categories/url2">name2</a>
```
### tagsList
#### 语法
```html
<#list tags as tag>
// do something
</#list>
```
#### 参数
```json
[{
"createTime": "2021-02-25T13:34:48.779Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}]
```
#### 示例
获取文章的标签列表:
```html
<#list tags as tag>
<a href="${tag.fullPath!}">${tag.name!}</a>
</#list>
```
输出:
```html
<a href="http://localhost:8090/tags/url1">name1</a>
<a href="http://localhost:8090/tags/url2">name2</a>
```
### metasObject
#### 语法
```html
${metas.key}
```
attribute 代表具体 key 值。
#### 参数
#### 示例
获取用户设置的音乐链接:
```html
<audio src="${metas.music_url}" controls="controls"></audio>
```
输出:
```html
<audio src="/music.mp3" controls="controls"></audio>
```
## 自定义页面sheet.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/s/{slug}`
### sheetObject
#### 语法
```html
${sheet.attribute}
```
attribute 代表具体属性。
#### 参数
```json
{
"commentCount": 0,
"createTime": "2021-02-25T13:37:29.775Z",
"disallowComment": true,
"editTime": "2021-02-25T13:37:29.775Z",
"editorType": "MARKDOWN",
"formatContent": "string",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaIds": [
0
],
"metaKeywords": "string",
"metas": [
{
"createTime": "2021-02-25T13:37:29.775Z",
"id": 0,
"key": "string",
"postId": 0,
"value": "string"
}
],
"originalContent": "string",
"password": "string",
"slug": "string",
"status": "DRAFT",
"summary": "string",
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2021-02-25T13:37:29.775Z",
"visits": 0,
"wordCount": 0
}
```
#### 示例
获取页面标题:
```html
<span>${sheet.title!}</span>
```
输出:
```html
<span>示例页面</span>
```
### metasObject
#### 语法
```html
${metas.key}
```
attribute 代表具体 key 值。
#### 参数
#### 示例
获取用户设置的音乐链接:
```html
<audio src="${metas.music_url}" controls="controls"></audio>
```
输出:
```html
<audio src="/music.mp3" controls="controls"></audio>
```
## 文章归档页面archives.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/archives`
### postsList
#### 语法
```html
<#list posts.content as post>
// do something
</#list>
```
#### 参数
```json
[{
"content": [{
"categories": [{
"createTime": "2020-10-13T13:23:39.143Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"slug": "string",
"thumbnail": "string"
}],
"commentCount": 0,
"createTime": "2020-10-13T13:23:39.143Z",
"disallowComment": true,
"editTime": "2020-10-13T13:23:39.143Z",
"editorType": "MARKDOWN",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaKeywords": "string",
"metas": {},
"password": "string",
"slug": "string",
"status": "PUBLISHED",
"summary": "string",
"tags": [{
"createTime": "2020-10-13T13:23:39.143Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2020-10-13T13:23:39.143Z",
"visits": 0,
"wordCount": 0
}],
"empty": true,
"first": true,
"last": true,
"number": 0,
"numberOfElements": 0,
"pageable": {
"page": 0,
"size": 0,
"sort": [
"string"
]
},
"size": 0,
"sort": {
"sort": [
"string"
]
},
"totalElements": 0,
"totalPages": 0
}]
```
#### 示例
遍历输出归档页面的文章(无年份分组):
```html
<#list posts.content as post>
<a href="${post.fullPath!}">${post.title!}</a>
</#list>
```
输出:
```html
<a href="http://localhost:8090/archives/url1">title1</a>
<a href="http://localhost:8090/archives/url2">title2</a>
<a href="http://localhost:8090/archives/url3">title3</a>
```
### archivesList
#### 语法
```html
<#list archives.content as archive>
// do something
</#list>
```
#### 参数
```json
{
"content": [{
"posts": [{
"categories": [{
"createTime": "2021-03-07T05:45:06.271Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"password": "string",
"slug": "string",
"thumbnail": "string"
}],
"commentCount": 0,
"createTime": "2021-03-07T05:45:06.271Z",
"disallowComment": true,
"editTime": "2021-03-07T05:45:06.271Z",
"editorType": "MARKDOWN",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaKeywords": "string",
"metas": {},
"password": "string",
"slug": "string",
"status": "DRAFT",
"summary": "string",
"tags": [{
"createTime": "2021-03-07T05:45:06.271Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2021-03-07T05:45:06.271Z",
"visits": 0,
"wordCount": 0
}],
"year": 0
}],
"hasContent": true,
"hasNext": true,
"hasPrevious": true,
"isEmpty": true,
"isFirst": true,
"page": 0,
"pages": 0,
"rpp": 0,
"total": 0
}
```
#### 示例
遍历输出归档页面的文章(有年份分组):
```html
<#list archives.content as archive>
<h1>${archive.year?c}</h1>
<#list archive.posts as post>
<a href="${post.fullPath!}">${post.title!}</a>
</#list>
</#list>
```
输出:
```html
<h1>2021</h1>
<a href="http://localhost:8090/archives/url1">title1</a>
<a href="http://localhost:8090/archives/url2">title2</a>
<a href="http://localhost:8090/archives/url3">title3</a>
<h1>2020</h1>
<a href="http://localhost:8090/archives/url4">title4</a>
<a href="http://localhost:8090/archives/url5">title5</a>
<a href="http://localhost:8090/archives/url6">title6</a>
```
## 分类目录页面categories.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/categories`
此页面无页面变量,可以使用 [模板标签](/developer-guide/theme/template-tag) 获取分类列表。
## 单个分类所属文章页面category.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/categories/{slug}`
### postsList
#### 语法
```html
<#list posts.content as post>
// do something
</#list>
```
#### 参数
```json
[{
"content": [{
"categories": [{
"createTime": "2020-10-13T13:23:39.143Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"slug": "string",
"thumbnail": "string"
}],
"commentCount": 0,
"createTime": "2020-10-13T13:23:39.143Z",
"disallowComment": true,
"editTime": "2020-10-13T13:23:39.143Z",
"editorType": "MARKDOWN",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaKeywords": "string",
"metas": {},
"password": "string",
"slug": "string",
"status": "PUBLISHED",
"summary": "string",
"tags": [{
"createTime": "2020-10-13T13:23:39.143Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2020-10-13T13:23:39.143Z",
"visits": 0,
"wordCount": 0
}],
"empty": true,
"first": true,
"last": true,
"number": 0,
"numberOfElements": 0,
"pageable": {
"page": 0,
"size": 0,
"sort": [
"string"
]
},
"size": 0,
"sort": {
"sort": [
"string"
]
},
"totalElements": 0,
"totalPages": 0
}]
```
#### 示例
遍历输出某个分类的文章:
```html
<#list posts.content as post>
<a href="${post.fullPath!}">${post.title!}</a>
</#list>
```
输出:
```html
<a href="http://localhost:8090/archives/url1">title1</a>
<a href="http://localhost:8090/archives/url2">title2</a>
<a href="http://localhost:8090/archives/url3">title3</a>
```
### categoryObject
#### 语法
```html
${category.attribute}
```
attribute 代表具体属性。
#### 参数
```json
{
"createTime": "2020-10-11T05:59:40.622Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"slug": "string",
"thumbnail": "string",
"postCount": 0
}
```
#### 示例
```html
<a href="${category.fullPath!}">分类:${category.name!}</a>
```
输出:
```html
<a href="http://localhost:8090/categories/url1">分类name1</a>
```
## 标签页面tags.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/tags`
此页面无页面变量,可以使用 [模板标签](/developer-guide/theme/template-tag) 获取标签列表。
## 单个标签所属文章页面tag.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/tags/{slug}`
### postsList
#### 语法
```html
<#list posts.content as post>
// do something
</#list>
```
#### 参数
```json
[{
"content": [{
"categories": [{
"createTime": "2020-10-13T13:23:39.143Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"slug": "string",
"thumbnail": "string"
}],
"commentCount": 0,
"createTime": "2020-10-13T13:23:39.143Z",
"disallowComment": true,
"editTime": "2020-10-13T13:23:39.143Z",
"editorType": "MARKDOWN",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaKeywords": "string",
"metas": {},
"password": "string",
"slug": "string",
"status": "PUBLISHED",
"summary": "string",
"tags": [{
"createTime": "2020-10-13T13:23:39.143Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2020-10-13T13:23:39.143Z",
"visits": 0,
"wordCount": 0
}],
"empty": true,
"first": true,
"last": true,
"number": 0,
"numberOfElements": 0,
"pageable": {
"page": 0,
"size": 0,
"sort": [
"string"
]
},
"size": 0,
"sort": {
"sort": [
"string"
]
},
"totalElements": 0,
"totalPages": 0
}]
```
#### 示例
遍历输出某个标签的文章:
```html
<#list posts.content as post>
<a href="${post.fullPath!}">${post.title!}</a>
</#list>
```
输出:
```html
<a href="http://localhost:8090/archives/url1">title1</a>
<a href="http://localhost:8090/archives/url2">title2</a>
<a href="http://localhost:8090/archives/url3">title3</a>
```
### tagObject
#### 语法
```html
${tag.attribute}
```
attribute 代表具体属性。
#### 参数
```json
{
"createTime": "2020-10-11T06:14:30.595Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}
```
#### 示例
```html
<a href="${tag.fullPath!}">标签:${tag.name!}</a>
```
输出:
```html
<a href="http://localhost:8090/tags/url1">标签name1</a>
```
## 文章搜索结果页面search.ftl
访问路径:`http://yourdomain/search?keyword=keyword`
### keywordString
#### 语法
```html
${keyword!}
```
#### 参数
#### 示例
```html
搜索关键字为:${keyword!}
```
### postsList
#### 语法
```html
<#list posts.content as post>
// do something
</#list>
```
#### 参数
```json
[{
"content": [{
"categories": [{
"createTime": "2020-10-13T13:23:39.143Z",
"description": "string",
"fullPath": "string",
"id": 0,
"name": "string",
"parentId": 0,
"slug": "string",
"thumbnail": "string"
}],
"commentCount": 0,
"createTime": "2020-10-13T13:23:39.143Z",
"disallowComment": true,
"editTime": "2020-10-13T13:23:39.143Z",
"editorType": "MARKDOWN",
"fullPath": "string",
"id": 0,
"likes": 0,
"metaDescription": "string",
"metaKeywords": "string",
"metas": {},
"password": "string",
"slug": "string",
"status": "PUBLISHED",
"summary": "string",
"tags": [{
"createTime": "2020-10-13T13:23:39.143Z",
"fullPath": "string",
"id": 0,
"name": "string",
"slug": "string",
"thumbnail": "string"
}],
"template": "string",
"thumbnail": "string",
"title": "string",
"topPriority": 0,
"topped": true,
"updateTime": "2020-10-13T13:23:39.143Z",
"visits": 0,
"wordCount": 0
}],
"empty": true,
"first": true,
"last": true,
"number": 0,
"numberOfElements": 0,
"pageable": {
"page": 0,
"size": 0,
"sort": [
"string"
]
},
"size": 0,
"sort": {
"sort": [
"string"
]
},
"totalElements": 0,
"totalPages": 0
}]
```
#### 示例
遍历输出某个搜索结果的文章:
```html
<#list posts.content as post>
<a href="${post.fullPath!}">${post.title!}</a>
</#list>
```
输出:
```html
<a href="http://localhost:8090/archives/url1">title1</a>
<a href="http://localhost:8090/archives/url2">title2</a>
<a href="http://localhost:8090/archives/url3">title3</a>
```
## 友情链接页面links.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/links`
此页面无页面变量,可以使用 [模板标签](/developer-guide/theme/template-tag) 获取友情链接列表。
## 图库页面photos.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/photos`
### photosList
#### 语法
```html
<#list photos.content as photo>
// do something
</#list>
```
#### 参数
```json
{
"content": [{
"description": "string",
"id": 0,
"location": "string",
"name": "string",
"takeTime": "2021-03-07T05:28:12.352Z",
"team": "string",
"thumbnail": "string",
"url": "string"
}],
"hasContent": true,
"hasNext": true,
"hasPrevious": true,
"isEmpty": true,
"isFirst": true,
"page": 0,
"pages": 0,
"rpp": 0,
"total": 0
}
```
#### 示例
```html
<#list photos.content as photo>
<img alt="${photo.description!}" src="${photo.url!}"/>
</#list>
```
输出:
```html
<img alt="山川" src="https://youdomain.com/upload/2021/01/1.png"/>
<img alt="河流" src="https://youdomain.com/upload/2021/01/2.png"/>
<img alt="绿树" src="https://youdomain.com/upload/2021/01/3.png"/>
```
## 日志页面journals.ftl
访问路径不固定,视固定链接配置而定,默认为:`http://yourdomain/journals`
### journalsList
#### 语法
```html
<#list journals.content as journal>
// do something
</#list>
```
#### 参数
```json
{
"content": [{
"commentCount": 0,
"content": "string",
"createTime": "2021-03-07T05:32:06.365Z",
"id": 0,
"likes": 0,
"sourceContent": "string",
"type": "INTIMATE"
}],
"hasContent": true,
"hasNext": true,
"hasPrevious": true,
"isEmpty": true,
"isFirst": true,
"page": 0,
"pages": 0,
"rpp": 0,
"total": 0
}
```
#### 示例
```html
<ul>
<#list journals.content as journal>
<li>
${journal.createTime?string('yyyy年MM月dd日')}${journal.content!}
</li>
</#list>
</ul>
```
输出:
```html
<ul>
<li>
2021年3月7日内容1
</li>
<li>
2021年3月7日内容2
</li>
</ul>
```