Post (文章)

一般情况下,Post 对象 会拥有下述这些属性,但是 FarBox 的基础存储是完全开放的,如果你使用了特殊的方式,直接往 Bucket 里存入了一个 post 类型的 record,那么,以上的属性将完全由你自己的 record 决定。

title

文章的名称

url

文章的URL地址,默认类似/post/xxxx,如果网站设置中设定无前缀,则会是/xxxx的形式

url_path

接近url,但是没有前缀,比如 post.url/post/xxxx 的时候,对应的 url_path 为 xxxx

status

当前文章的状态,默认为public,可以自定义,由用户书写当前文章的Metadata中的status这个key决定

toc

当前文章的TOC内容(各层级标题的索引),HTML结构的源码,数据格式为字符串

tags

等同post.metadata.tags,视为文档的标签,类型为list

date

日志的发布时间,数据类型为 Date

content

已经(由Markdown)编译为HTML格式的内容, 数据类型为 Text

raw_content

文章的原始内容,Markdown未编译

cover

日志的封面,如果metadata.cover不存在,则默认提取文章内的第一张图片作为封面;如果都不存在,则是一个空值

text_length

字符长度, 但不同于 utf8 编码, 这是 unicode 编码的计数,一个中文字或者一个字母,都计数为 1

text_words

字数长度, 英文的单词计数为1, 中日韩文一个字计数为1 (误差率 2% 左右)

images

从文章中提取出来的图片 URL (list 类型)

visits

访问页面数 (PV),这是系统构造属性,不是 post 对象直接拥有的,并且会随着 post 详细页的访问而增加

visitors

访问人数 (UV),同 visits 也是系统构造属性

metadata

用户对该文档声明的元数据。

原始文档的声明语法

yaml 形式:

---
date: 2015-01-10 19:55
layout: 'post'
title: 'Blogging Like a Hacker'
tags:
    - "hello"
    - 'world'
status: 'public'
---

然后这里是文章的开始

如上所示,首行以---开始,内部使用yaml格式,并最终以---单独一行结束的,会最终解析为文章的元信息(描述性信息),一般Jekyll、Hexo等静态博客用得比较多。

FarBox 简约式:

另外,Bitcron的Markdown解析,也支持一种更简洁的Meta声明语法,就是首行开始,每行用key: value格式进行声明的,其中key必须是英文名。

比如

date: 2015-01-10 19:55
layout: 'post'
title: 'Blogging Like a Hacker'
tags: hello, world

然后这里是正文的开始...

注意事项:

  1. 两种方式只能选择一种,两者无法同时生效。
  2. key的值必须是英文,并且不能以数字开头
  3. key的文字之间不能使用运算符号,比如+-x/post-x: value这种写法是错误的,正确的是post\_x: value
  4. key不区分大小写,KEYkey的效果是一样的

下面对常见的 metadata 声明字段做简单的说明:

title

如果有定义title,则会覆盖写入至对应的{{post.title}}字段。
如果没有定义title,则会自动取文件名作为日志的标题; 如果文章中有、且仅有一个H1的一级标题,则会以之作为title。

date

日志的发布时间,如果没有声明,我们会按照以下的规则获取文章的发表时间:

  1. 2012-12-12 Title.txt这样的文件名,我们会取出前面符合日期规则的字符作为发表时间;
  2. 默认取文件的最后修改时间作为发表时间。

url

可以用来自定义日志的URL
它会写入到 {{post.url_path}} 这个字段中去。

status

默认为public,也是默认显示在网站中的日志类型。
它的value可以是任意值,但不能超过20个字符长。

toc

一篇日志如果使用多级标题(H1、H2、H3 .etc),那么'post.toc'这个属性则对应多级标题的索引,即Table of Contents。
单篇文章的toc配置信息, 优先级高于站点上的配置。
接受值: true/false