Una | 尤娜

一个基于Spring Boot 2.0构建的Java博客系统

序言

实现尤娜主题渲染标签的目的是为了能够加快主题皮肤的制作,对于不熟悉Java语言或者对Spring Boot不太了解的朋友也能快速的定制出自己的博客主题。尤娜主题渲染标签是在Freemarker框架的基础上实现的,沿用了Freemarker的基础标签,如逻辑判断(if语句,if…else语句,多重if…else语句,switch语句等),数据迭代(对象数组,分页),数据格式化(时间格式化)以及数据排序等。尤娜主题渲染标签分为全局常量,内容标签,格式化函数,脚本函数和分页函数五类,在接下来的内容中,将做详细介绍。下面是Freemarker的基本原理图,对Freemarker不是太熟悉的朋友可访问其官网(https://freemarker.apache.org/) 了解更多详细的知识。

格式化函数

在尤娜v1.2.2版本中,共提供了5个格式化函数,它们时字符串长度截取函数u_ellipsis(),数值格式化函数u_numberFormat(),字数统计函数u_wordNumber(),时间格式化函数u_timeAgo()和阅读时间计算函数u_readTime()。

u_ellipsis()

在制作主题时,往往会遇到字符串的长度超过div的宽度,需要对字符串进行截取。我们可以通过CSS3或者Freemarker自带的substring()对字符串进行截取,但两种方式相对来说都比较麻烦,因此,从尤娜1.2.0版本开始便提供了内置的字符串截取函数u_ellipsis()。该函数接收两个参数,一个是字符串,一个是截取长度,当字符串长度超过所设置的长度时,会自动对字符串进行截取,并在截取的字符串末尾添加“…”。下面是u_ellipsis()函数使用示例:

Data

String msg = "尤娜是一个开源免费的博客系统,使用Java语言进行开发";

u_ellipsis()

${u_ellipsis(msg 17)}

Output

尤娜是一个开源免费的博客系统...

u_numberFormat()

通常,我们都会在网页中对数字进行格式化输出,如科学计数法(1,100,000),用K代表千(1K,10K)。在尤娜系统中,提供了以科学计数法对数值进行格式化输出的函数u_numberFoarmat(),该函数接收一个数值参数,下面是函数使用示例:

Data

Integer total = 1314996;

u_numberFormat()

<span> ${u_numberFormat(total)}</span>

Output

1,314,996

u_wordNumber()

在尤娜主题中,可以使用u_wordNumber()函数对文章的字数进行统计,在醒目的位置告知读者当前文章有多少字。下面是我个人博客中的一个截图:

下面是u_wordNumber()使用示例,该函数接收一个字符串参数:

Data

String content = "尤娜是一个基于Spring Boot 2.0 进行构建的Java博客系统"

u_wordNumber()

<span>本文共计${u_wordNumber(content)}个字</span>

Output

本文共计21个字

补充

u_wordNumber()会自动将内容中的空格,标点符号,换行符等剔除再计算字数,英文以空格切分计算。

u_timeAgo()

u_timeAge()函数用于计算文章发布时间到当前的时间长度,并以秒,分,小时,天,月和年格式化时间。假设我们有如下的几个文章发布时间:

Data

String date1 = "2019-01-01 12:00:00";
String date2 = "2019-12-31 00:59:00";
String data3 = "2020-01-01 00:00:00";

假设当前时间为2020-01-01 00:00:00,使用u_timeAgo()对上述三个发布时间进行格式化:

<span>${u_timeAgo(date1)}</span>
<span>${u_timeAgo(date2)}</span>
<span>${u_timeAgo(date3)}</span>

Output

1年以前
1分钟以前
刚刚

补充

除了使用u_timeAgo()函数对时间进行格式化外,你还可以选择Freemarker自带的格式化函数对时间进行格式化,例如对2020-04-05 06:11进行格式化:

Data

String date = "2020-04-05 06:11";

html

<span>${date?string("yyyy年MM月dd日")}</span>

Output

2020年04月05日

u_readTime()

u_readTime()是尤娜1.2.2版本中新增的一个趣味性函数,用于估算正常情况下阅读文章完文章所需要的时间。u_readTime()函数接收一个字符串变量(文章内容),并以200字/分钟的阅读速度计算阅读时间。下面是我个人网站的一个截图:

下面是u_readTime()函数的使用示例:

Data

String content = "你假装这里有4512个字";

u_readTime()

<span>预计阅读需要${u_readTime(content)}分钟</span>

Output

预计阅读需要22分钟