本文是[链接]的一个章节,该系列文章将介绍 [链接] 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ️ 生成导出静态站点 自 v3.9.0 开始,Solo 开始支持生成并导出静态站点, ..

Solo 生成导出静态站点

本文是《Solo 从设计到实现》的一个章节,该系列文章将介绍 Solo 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ❤️

生成导出静态站点

自 v3.9.0 开始,Solo 开始支持生成并导出静态站点,以方便用户部署 GitHub Pages 这类静态网站托管服务。

使用流程

  1. 功能入口:管理后台 - 工具 - 静态站点
  2. 输入待生成的静态站点地址,比如 https://88250.github.io
  3. 点击“生成”按钮触发静态站点页面资源生成
  4. 生成完毕后界面会返回导出的目录路径

技术实现

// 切换至静态站点生成模式
Latkes.setServerScheme(u.getProtocol());
Latkes.setServerHost(u.getHost());
if (-1 != u.getPort()) {
    Latkes.setServerPort(String.valueOf(u.getPort()));
} else {
    Latkes.setServerPort("");
}
Solos.GEN_STATIC_SITE = true;

genURI("/tags.html");
genURI("/archives.html");
genURI("/links.html");
genURI("/categories.html");
genURI("/index.html");
genURI("/blog/info");
genURI("/manifest.json");
genURI("/rss.xml");

genArticles();
genTags();
genArchives();
genCategories();
genSkins();
genJS();
genImages();
genPlugins();
genFile("sw.js");
genFile("robots.txt");
genFile("CHANGE_LOGS.md");

// 恢复之前的动态运行模式
Latkes.setServerScheme(curScheme);
Latkes.setServerHost(curHost);
Latkes.setServerPort(curPort);
Solos.GEN_STATIC_SITE = false;

对于文章,仅导出:

除了页面相关资源的生成,静态博客站点还需要浏览计数统计和评论功能,为此我们做了两个组件来进行支持:

UVStat

引入 uvstat.js 后将需要统计的计数项用 span 包裹:

<span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span>

然后调用 addStat 进行计数请求, renderStat 进行计数结果渲染,细节请参考项目文档。

uvstat 部署在社区服务器上,是 B3log 分布式社区的重要基础设施,Solo 已经全部切换到该服务上实现浏览计数了。

VComment

引入 vcomment.js 后在评论列表处引入:

<div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<div id="soloComments" class="fn__none">
  <@comments commentList=articleComments article=article></@comments>
</div>

Solo 本地的评论列表依然保留,只是默认不展现,当通过 vcomment “加载为空”后才展现本地评论列表。“加载为空”只有一种情况:该文章没有同步到社区,所以不存在和该文章关联的回帖。

这样用户如果不想推送文章到社区,也可以使用本地的评论系统,如果推送过了,就优先走社区评论系统。走社区评论系统的优势是能够最大限度共享社区交互功能,比如回帖回复、二级评论、感谢、通知等。

技术实现方面主要用到了 CORS,接口完全由社区提供,本地直接加载社区服务端渲染的 HTML,提交时带 CSRF Token 避免跨站脚本攻击。


回到全文目录:《Solo 从设计到实现》

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。

    Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
    具体细节请浏览 B3log 构思

    1005 引用 • 7685 回帖 • 651 关注
  • 设计
    92 引用 • 618 回帖 • 1 关注
  • UVStat
    1 引用 • 6 回帖
  • VComment
    1 引用 • 6 回帖
5 回帖
请输入回帖内容...
  • Adrift001 1 评论

    感觉有点麻烦...

    1 回复
    我也觉得 😂
    YLongo
  • hjljy

    手动点赞

  • JssDream

    👍

  • CodingOX

    厉害,辛苦了!

  • AlgerFan

    想实现静态站点必须得把计数和评论抽离出来