皮肤开发 框架简介 solo/src/main/webapp 页面结构 |- admin // 后台管理 |- common-template // 通用模版 | |- kill-browser.ftl // 对非现代浏览器展现的提示 | |- label.ftl // js 中需要使用到的 Java 变量 | |- ..

Solo 皮肤开发指南

皮肤开发

框架简介

solo/src/main/webapp 页面结构

|- admin                        // 后台管理
|- common-template         // 通用模版
|  |- kill-browser.ftl          // 对非现代浏览器展现的提示
|  |- label.ftl                 // js 中需要使用到的 Java 变量
|  |- macro-comment_script.ftl  // 评论宏
|  |- macro-common_head.ftl     // html 中的 head 宏
|  |- macro-common_page.ftl     // 皮肤以外的其他页面宏
|  |- macro-user_site.ftl       // 用户自定义的站点宏
|  |- search.ftl                // 搜索页面
|  |- start.ftl                 // 开始使用页面,即登录/注册
|  |- share.ftl                 // 分享,需配合 page.share() 使用
|  |- toc.ftl                   // 文章目录
|  |- top-bar.ftl               // 皮肤顶部导航栏,可选
|- error                        // 错误页面
|- images                       // 通用图片
|- js                           // js 目录
|  |- admin                     // 后台 js 
|  |- lib                       // js 第三方库
|  |- common.js                 // 通用方法
|  |- page.js                   // 文章页面通用方法
| - markdowns                   // 存放导入的 markdowns
| - plugins                     // 插件
| - scss                        // 样式文件
|- skins                        // 参见下面的皮肤结构
|- WEB-INF                      // 页面资源配置
|- CHANGE_LOGS.html             // 版本修改历史
|- manifest.json                // 移动站点描述
|- robots.txt                   // 爬虫设置
|- sw.js                        // service work 文件

solo/src/main/webapp/skins/skin-name 皮肤结构

|- css                       // 样式目录
|  |- fonts                  // 字体文件
|  |- base.scss              // 使用 sass,npm run dev 可生成 base.css 文件
|  |- base.css               // 样式,尽量避免使用行内样式及页内样式
|- images                    // 图片目录
|- js                        // JavaScript 目录
|  |- common.js              // 脚本,尽量避免在 ftl 中写脚本
|  |- common.min.js          // npm run build 后根据 common.js 生成
|- lang                      // 语言配置文件,当 solo/src/main/resources/lang_zh_CN.properties 中无配置时可添加至此
|  |- lang_en_US.properties  // 英文
|  |- lang_zh_CN.properties  // 中文
|- archive-articles.ftl      // 某年某月所写文章的列表页面
|- archives.ftl              // 存档列表页面
|- article.ftl               // 文章页面
|- article-list.ftl          // 文章列表,可复用于有文章列表的页面
|- categories.ftl            // 分类页面
|- category-articles.ftl     // 某分类下的文章列表页面
|- common-comment.ftl        // 评论模版
|- dynamic.ftl               // 动态页面
|- footer.ftl                // 页尾
|- header.ftl                // 页头
|- index.ftl                 // 首页页面
|- links.ftl                 // 链接列表页面
|- author-articles.ftl       // 某用户所写的文章列表页面
|- macro-comments.ftl        // 评论列表及回复的宏
|- preview.png               // 皮肤首页截图,大小为 280px * 160px
|- side.ftl                  // 侧边栏
|- skin.properties           // 皮肤信息
|- tag-articles.ftl          // 某标签的文章列表页面
|- tags.ftl                  // 标签列表页面

开发步骤

  1. 安装 node 环境,根目录下运行 npm install
  2. solo/src/main/webapp/skins 目录下按照皮肤结构创建对应的文件夹及文件。可参照 nijigen 皮肤。
  3. 根目录下运行 npm run dev 对 scss 文件进行热编译,实时生成对应的 CSS。
  4. 从 index.ftl 开始入手依次编写页面。

Pjax 使用

  1. 引入 ${staticServePath}/js/lib/compress/pjax.min.js [已包含 jquery-3.1.0.min.js]
  2. scss 文件中添加 @import "../../../scss/nprogress";
  3. 页面中需要 pjax 的部分请参照以下代码进行修改
<div id="pjax">  
<#if pjax><!---- pjax {#pjax} start ----></#if>
我是需要 pjax 的内容
<#if pjax><!---- pjax {#pjax} end ----></#if>  
</div>
...
<#if pjax><!---- pjax {#pjax} start ----></#if>
我是需要 pjax 的脚本
<#if pjax><!---- pjax {#pjax} end ----></#if>  
  1. 调用 Util.initPjax
  2. 在文章页面、首页、其他页面来回切换进行 pjax 测试,检查功能和脚本是否正常。

注意事项

© ${year} <a href="${servePath}">${blogTitle}</a> ${footerContent}
Powered by <a href="https://solo.b3log.org" target="_blank">Solo</a> 
Theme <a rel="friend" href="code-site" target="_blank">${skinDirName}</a>
 <sup>[<a href="reference-site" target="_blank">ref</a>]</sup> 
by <a href="your-site" target="_blank">your-name</a>

模板变量

公共模板变量

⚠️ 某些变量只能在 side.ftl 中使用,其他 ftl 需使用可通过 <#include "side.ftl"> 进行引入

变量 类型 说明
hljsTheme String 代码高亮主题
usite Map 用户站点配置信息
footerContent String 页脚自定义内容
adminUser JSONObject 管理员
userName String 当前登录用户名
isIndex Bool 判断是否是首页
faviconAPI String 获取 favicon API 地址
isLoggedIn Bool 用户登录判断
gravatar String 当前登录人的 gravatar 地址
runtimeMode String 运行模式,例如 DEVELOPMENT
runtimeEnv String 运行环境,例如 GAE
pageType String 当前页面类型,例如 Index,Article,DateArticles
servePath String 应用路径,可在 latke.properties 中配置
staticServePath String 静态资源路径,可在 latke.properties 中配置
staticResourceVersion String js, CSS 版本号,防止缓存
topBarReplacement String 公用 top-bar.ftl 内容
path String Action 路径
archiveDates List 存档日期列表
articles List 存档文章列表
blogTitle String 博客标题
blogHost String 博客地址
blogSubtitle String 博客子标题
htmlHead String 用户自定义的 HTML Head
links List 链接列表
localeString String 区域设定字符串
metaKeywords String 用户自定义的关键字
metaDescription String 用户自定义的描述
mostCommentArticles List 评论最多的文章列表
mostUsedTags List 引用最多的标签列表
mostViewCountArticles List 访问最多的文章列表
noticeBoard String 用户自定义的公告栏
oId String 存档日期对象 Id
pageNavigations List 自定义页面列表
paginationFirstPageNum Integer 文章列表分页第一页页码
paginationLastPageNum Integer 文章列表分页最末页页码
paginationPageNums List 文章列表分页页号
paginationPageCount Integer 文章列表页数
recentComments List 最新评论列表
skinDirName String 当前使用的皮肤目录名
statistic JSONObject 统计信息对象
onlineVisitorCnt Integer 在线访客统计数
users List 用户列表
version String 当前使用的 Solo 版本
year String 当前年份
loginURL String 登录 URL
logoutURL String 登出 URL

archive-articles.ftl

变量 类型 说明
archiveDate JSONObject 存档日期对象
articles List 文章列表

archives.ftl

变量 类型 说明
archiveDates List 存档列表

article.ftl

变量 类型 说明
article JSONObject 文章对象
articleComments List 文章评论列表
externalRelevantArticlesDisplayCount Integer 站外相关文章显示数
nextArticlePermalink String 下一篇文章链接
nextArticleTitle String 下一篇文章标题
previousArticlePermalink String 上一篇文章链接
previousArticleTitle String 上一篇文章标题

author-articles.ftl

变量 类型 说明
authorName String 用户名

categories.ftl

变量 类型 说明
categories List 分类列表

category-articles.ftl

变量 类型 说明
category JSONObject 分类对象
articles List 文章列表

links.ftl

变量 类型 说明
links List 链接列表

tag-articles.ftl

变量 类型 说明
tag JSONObject 标签对象
articles List 文章列表

tags.ftl

变量 类型 说明
tags List 标签列表

预览下载

官方皮肤

其余 16 个皮肤

社区皮肤

在此感谢 B3log 社区 Solo 爱好者的贡献

其余 9 个皮肤

全局预览

可直接访问 https://solo.b3log.org ,点击皮肤预览进行查看。

新皮肤推荐

大家可以在 issue #12449 下跟帖来推荐皮肤,我们会按点赞数进行参考并融入自己的风格后进行制作。当然,也欢迎大家参考本帖后自行开发。

加入开发

  1. 回贴提供皮肤下载及演示地址
  2. 官方进行测试及反馈
  3. 将皮肤链接加入 https://solo.b3log.org/#themes 官网及本帖中
  • Solo

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

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

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

    860 引用 • 6515 回帖 • 672 关注
  • 开发文档
    1 引用 • 52 回帖
  • 皮肤
    33 引用 • 291 回帖
2 操作
Vanessa 在 2019-08-05 22:20:39 更新了该帖
Vanessa 在 2019-08-05 22:30:36 更新了该帖
优质回帖
51 回帖
请输入回帖内容...
  • YangChun-ABC

    沙发

  • InkDP

    CSS JS 基本白嫖 所以快

  • Vanessa 2 评论

    高产呀

    1 回复
    感觉这个真的很好看 要不后期 V 姐把它加入官方包
    InkDP
    @jinjianh 放在你的仓库上,待会我加一下链接就可以了
    Vanessa
  • InkDP
    1 回复
    1 操作
    InkDP 在 2019-08-22 18:14:15 更新了该回帖
  • Vanessa

    好的,待我重新整理一下

  • zjhch123 1

    目录结构是不是漏了一个category.ftl用于展示所有文章分类?

    1 回复
  • InkDP 9 评论

    下载地址:https://github.com/JinJianh/solo-star
    预览地址:https://www.jinjianh.com/?skin=solo-star

    只有 PC 端口,因为被人不喜欢做响应式所以没做(其实就是懒),欢迎 PR

    此皮肤看板娘有点看着违和,所以我把他藏起来了

    2 操作
    InkDP 在 2019-08-03 10:36:27 更新了该回帖
    InkDP 在 2019-08-22 18:12:10 更新了该回帖
    看板娘可以在后台插件设置中进行关闭
    Vanessa
    您的请求在 Web 服务器中没有找到对应的站点!,打不开
    Vanessa
    @Vanessa ???
    InkDP
    @jinjianh 刚才访问不了,提示 “您的请求在 Web 服务器中没有找到对应的站点!”
    Vanessa
    https://www.jinjianh.com/archives.html 这个页面还在开发中?
    Vanessa
    @Vanessa 是的 我打算做一个不一样的存档,等 D 哥支持中
    InkDP
    @jinjianh 哦,怪我们咯。😂
    Vanessa
    Vanessa
    @Vanessa 没有没有,只是我想做的不一样一点
    InkDP
  • 88250

    ToC 是根据内容自动生成的,# 标题(1 到 6 级都可以)需要大于等于 3 个才会生成。

  • czeta

    我把 Bruce 主题的文章页面的顶部图片元素给删了,为什么右边的 toc 也会没啊

    1 回复
  • hkpqazwsxedc

    美丽..

  • pengljun

    哈哈哈哈哈 你重新弄一下,我的锅,我刚刚在测试最热文章那个... 以为没人用

    现在好了,v 姐教我弄好了

  • Eddie 1 评论

    500?????

    1 回复
    啥?
    Vanessa
  • Vanessa

    已添加 @88250 抽空部署以下 solo.b3log.org

  • pengljun 2 1 赞同

    下载地址:https://github.com/pengljun/solo-aragaki.git
    预览地址:http://blog.konngo.cn/?skin=solo-aragaki

    移植过来的一款非常好看的皮肤....

    1 回复
  • 88250

    你现在用的皮肤下面缺少 skin.props 文件。

  • kunkunxiong

    怎么看?

    1 回复
  • 88250

    有影响,你看下是不是皮肤没有下载全。

    1 回复
  • kunkunxiong

    imagepng
    后台错误有影响吗?

    1 回复
  • kunkunxiong

    imagepng

  • 88250

    开 F12 看看网络请求,这个素材有点大,估计是带宽问题。

    1 回复
  • kunkunxiong
    该回帖仅作者和楼主可见
    1 回复
  • dacxy

    谢谢,好了,是缓存问题,清一下缓存就可以了

  • Vanessa

    你在 network 里面看一下这两个请求是否返回正常

    1 回复
  • dacxy

    本地部署的时候,nijigen 皮肤为什么光标效果没有,查了一下发现返回的 cursor.cur,pointer.cur 是显示不出来的。请问是哪里的原因?

    1 回复
  • Vanessa 1

    呃,我这里重现不了。要不到 GitHub 上面 new 个 issue 详细说吧 https://github.com/b3log/solo/issues/new?template=bug_report.md

  • lucky

    2.9.3 有 pjax.min.js 但没整合页面 我自己加的

    1 回复
  • Vanessa

    之前的版本没有全站 pjax ,即使有也存在你一开始说的问题。你核对一下版本

    1 回复
  • lucky

    好像不是...

    1 回复
  • Vanessa

    是不是缓存?

    1 回复
  • lucky

    😄 我线上的系统是之前的版本 , 这是今天刚刚把项目 clone 下来遇到的问题

    1 回复
  • Vanessa

    我去你站点试了下,菜单可以取消的;阅读完第一篇文章, 继续阅读第二篇文章的时候, 右侧菜单也会更新。可以分别给我一下重现步骤么?
    现在发现在自定义页面和文章页面切换目录不会消失。修改详见:https://github.com/b3log/solo-skins/commit/ab99a1c1397a30d5ddae07d5736141815c158f50
    PS:你的播放器好赞。

  • Vanessa

    丢脸丢到家了。我再看看,多谢。

    1 回复
  • lucky 1

    好像还有点问题,前三项不会取消菜单,后四项才会

    imagepng

    阅读完第一篇文章,继续阅读第二篇文章的时候,右侧菜单不会更新.

    imagepng

    2 回复
  • Vanessa
    1 回复
  • Vanessa 1

    在看了

  • lucky

    @Vanessa 大佬,这个什么时候能改一下, 我看了半天 没有好的解决方法

    2 回复
  • lucky 1

    新的 nijigen 主题,首页切换到标签页在切换回来的时候会出现样式异常.

    imagepng

    查看文章后右侧导航是不是应该把文章菜单去掉..

    imagepng

  • Vanessa

    模版里面的 pjax 注解可能没写对

  • lucky

    使用 pjax,某些链接(动态,文章详情页,归档)请求返回为 null,其他链接正常 ,这是什么问题 = =?

    imagepng

    imagepng

    imagepng

    1 回复
  • wuhongxu

    审美是病,多半没得治 = =

  • Vanessa

    可以用 bootstrap 来整一个

    1 回复
  • wuhongxu

    为什么你们的皮肤都做得这么好看,我想写一个好看的界面就那么难 QAQ

    1 回复
  • Vanessa

    哇哦,很不错 ❤️️ 已添加到 社区皮肤solo 首页

    要是移动端 footer 左右来点间距就更完美了。

  • zjhch123 1

    下载地址:https://github.com/zjhch123/solo-skin-amaze
    预览地址:https://blog.hduzplus.xyz/
    看一下哈,根据 issue 里的一个小伙伴说的皮肤做(魔改)的

    自测出一些 bug 哈,迟点修复一下


    修复的差不多啦

    2 回复
  • 373114194
    该回帖仅作者和楼主可见
  • xzy0725

    谢谢,已经找到

  • Vanessa

    这个网站和 solo 不是一个产品。
    next 这个皮肤 下载 预览

  • xzy0725

    问下,这个网站的模板皮肤是否包含在 solo 皮肤里了?哪套模板有类似右侧的导航功能?

    1 回复
  • Vanessa

    你可以随便写。一般建议 js 写在 </body> 标签前,CSS 写在 </head> 标签前

  • kkk

    imagepng
    这个是写在哪里的啊?

    1 回复
请输入回帖内容 ...