必要说明:

  • 主题开发好了,需要放在 下,系统启动会自动读取主题目录,然后在后台就可以选择你想要的主题了
  • 如果你不是开发环境,那需要将开发好的或者下载的主题文件夹放在 pybbs.jar 所在目录下的 templates/theme 文件夹下,如果这两个文件夹没有,需要你创建好
  • 开发主题肯定需要引入样式,建议使用 cdnjs.com 的外链,但也有一些对系统内的样式,这个样式文件需要放在 pybbs.jar 目录所在文件夹下的 templates/static/theme/css 文件夹下,js同理

主题必备目录有以下几个

必备的文件有如下

  1. simple
  2. ├── comment
  3. └── edit.ftl
  4. ├── error.ftl
  5. ├── index.ftl
  6. ├── login.ftl
  7. ├── notifications.ftl
  8. ├── register.ftl
  9. ├── search.ftl
  10. ├── tag
  11. ├── tag.ftl
  12. └── tags.ftl
  13. ├── top100.ftl
  14. ├── topic
  15. ├── create.ftl
  16. ├── detail.ftl
  17. └── edit.ftl
  18. └── user
  19. ├── collects.ftl
  20. ├── profile.ftl
  21. ├── settings.ftl
  22. └── topics.ftl

注意,上面列出来的文件夹和文件都是必备的

全局对象

通俗点说就是在所有页面里都能取到的数据的对象,有如下几个

  1. String formatContent(String content);
  2. Set<String> getUpIds(String upIds);
  3. boolean isEmpty(String txt);

site对象中的属性

在页面里取site里的属性方法 ${site.name!}

属性的类型全都是 String,可根据自己需要将值转成 int 或者 boolean

i18n对象中的属性

在页面中获取的方法是 ${i18n.getMessage("index")}

在标签返回对象里有一些不是定义的model里的对象,而是Map封装的对象,这些map里都有啥呢?

标签 tag_topics 对象中的Map包含的字段

  • Topic t.*: Topic对象里的所有字段
  • username: 用户名
  • avatar: 用户头像

标签 tag_notifications 对象中的Map包含的字段

  • Notification n.*: Notification对象里的所有字段
  • username: 用户名
  • avatar: 用户头像
  • title: 话题标题
  • topicId: 话题ID
  • id: 话题ID
  • title: 话题标题
  • content: 话题内容

标签 tag_user_topics 对象中的Map包含的字段

  • Topic t.*: Topic对象里的所有字段
  • username: 用户名
  • avatar: 用户头像

标签 tag_user_comments 对象中的Map包含的字段

  • Comment c.*: Comment对象里的所有字段
  • topicUsername: 话题的用户名
  • commentUsername: 话题的用户名
  • title: 话题标题
  • topicId: 话题ID

标签 tag_user_collects 对象中的Map包含的字段

  • Topic t.*: Topic对象里的所有字段
  • username: 用户名
  • avatar: 用户头像

自定义标签使用

自定义标签用法很简单,不会用的话,可以参考已经存在的主题里的用法,下面说一下首页的 tag_topics 标签的用法

至于标签里返回的对象都是什么东西,下面介绍,先说说每个路由渲染的页面里都能取出什么东西吧

对象包含的字段

分页对象 Page

这个对象是Mybatis-Plus里封装的,常用字段有以下几个

  • List records: 查询出来的列表放在这个里面,类型是个List
  • long current: 当前是第几页,从1开始
  • long total: 总条数
  • long pages: 总页数
  • long size: 每页显示条数
  1. private Integer id;
  2. private String username;
  3. private String telegramName;
  4. private String avatar;
  5. private String password;
  6. private String email;
  7. // 个人网站
  8. private String website;
  9. // 个人简介
  10. private Integer score;
  11. private Date inTime;
  12. private String token;
  13. // 有消息通知是否通过邮箱收取
  14. private Boolean emailNotification;
  15. // 帐号的激活状态
  16. private Boolean active;

话题对象 Topic

  1. private Integer id;
  2. private String title;
  3. private String content;
  4. private Date inTime;
  5. private Date modifyTime;
  6. private Integer userId;
  7. private Integer commentCount;
  8. // 收藏数
  9. private Integer collectCount;
  10. // 浏览数
  11. private Integer view;
  12. // 置顶
  13. private Boolean top;
  14. // 加精
  15. private Boolean good;
  16. // 点赞用户的id英文,隔开的,要计算被多少人点赞过,可以通过英文,分隔这个字符串计算数量
  17. private String upIds;

评论对象 Comment

评论(盖楼)对象 CommentsByTopic

  1. // 话题下面的评论列表单个对象的数据结构
  2. public class CommentsByTopic extends Comment implements Serializable {
  3. private String username;
  4. private String avatar;
  5. // 评论的层级,直接评论话题的,layer即为0,如果回复了评论的,则当前回复的layer为评论对象的layer+1
  6. private Integer layer;
  7. }

通知对象 Notification

  1. private Integer id;
  2. private Integer topicId;
  3. private Integer userId;
  4. // 通知对象ID
  5. private Integer targetUserId;
  6. // 动作: REPLY, COMMENT, COLLECT, TOPIC_UP, COMMENT_UP
  7. private String action;
  8. private Date inTime;
  9. private String content;