文章详情页面是博客系统中最为重要的页面,登录用户与游客都可以浏览文章详情页面,只不过只有登录用户才能进行其它的一些操作,比如评论、点赞和收藏等等。

本次的开发任务只是将文章详情页面展示出来,至于一些收藏、点赞、评论以及统计相关的功能后续慢慢加上。

1、后台核心代码

加载出文章的详情页面的核心代码如下:

/**
* 加载出文章详情页面
*
* @param articleId
* @param model
* @param session
* @return
*/
@RequestMapping(value = "/p/{articleId}", method = RequestMethod.GET)
public String view(@PathVariable("articleId") String articleId, Model model, HttpSession session) {
// 根据ID获取文章信息
Article article = articleService.getById(articleId); // 获取用户信息
User user = userService.getById(article.getUserId()); if (!StringUtils.isEmpty(article.getGroupId())) {
// 获取专栏信息
Group group = groupService.getById(article.getGroupId());
article.setGroupName(group.getName());
} // 获取文章标签信息
List<Tag> tags = tagService.queryByArticleId(articleId); // 获取该用户更多的文章信息
Wrapper<Article> queryWrapper = new QueryWrapper<Article>().lambda().eq(Article::getUserId, user.getUserId()).eq(Article::getStatus, Article.STATUS_SUCCESS).ne(Article::getArticleId, articleId).orderByDesc(Article::getPublishTime);
List<Article> moreArticles = articleService.queryForLimit(queryWrapper, 6); // 获取推荐的文章信息
List<Article> likeArticles = null;
if (tags != null && !tags.isEmpty()) {
// 根据标签来获取类似的文章
List<String> tagStrs = new ArrayList<String>();
tags.stream().forEach(tag -> tagStrs.add(tag.getTag()));
Map<String, Object> params = new HashMap<String, Object>();
params.put("status", Article.STATUS_SUCCESS);
params.put("articleId", articleId);
likeArticles = articleService.queryForLimitByTags(params, tagStrs, 10);
} else {
// 获取最新的文章信息
Wrapper<Article> likeWrapper = new QueryWrapper<Article>().lambda().eq(Article::getStatus, Article.STATUS_SUCCESS).ne(Article::getArticleId, articleId).orderByDesc(Article::getPublishTime);
likeArticles = articleService.queryForLimit(queryWrapper, 10);
} model.addAttribute("article", article);
model.addAttribute("user", user);
model.addAttribute("tags", tags);
model.addAttribute("moreArticles", moreArticles);
model.addAttribute("likeArticles", likeArticles);
return Const.BASE_INDEX_PAGE + "blog/article/view";
}

里面核心逻辑为:

  • 获取文章内容
  • 获取文章的标签
  • 获取该用户的更多文章列表
  • 根据标签查询出相关的文章,作为推荐文章列表

其实里面有一些统计相关的逻辑暂时没有加上,后续会加上。

2、前台核心代码

由于文章是通过editor.md工具完成的,所以前台文章展示也是要借助editor.md来完成,核心代码如下:

<div class="note-cont">
<div id="article-content">
<textarea id="article-content-textarea" style="display:none;">${article.content}</textarea>
</div>
</div>

首先文章内容像上面的代码一样放置于html中,同时当页面加载时需要执行如下的js代码,即:

$(function() {
editormd.markdownToHTML("article-content", {
htmlDecode : "style,script,iframe", // you can filter tags decode
emoji : true,
taskList : true,
tex : true, // 默认不解析
flowChart : true, // 默认不解析
sequenceDiagram : true, // 默认不解析
});
});

页面效果如下:

关注我

以你最方便的方式关注我:

微信公众号:

最新文章

  1. 打造高效前端工作环境-tmuxinator
  2. SharePoint 2013 通过审计获取文档下载次数
  3. 南昌PHP程序员的工资水平据说可达到8000了
  4. BZOJ3246 [Ioi2013]Dreaming
  5. Ubuntu启动时直接进入命令行模式
  6. SQL Server -SET QUOTED_IDENTIFIER
  7. 跨域的另一种解决方案CORS(CrossOrigin Resource Sharing)跨域资源共享
  8. 东方国信 - 软件开发人员面试问卷(ver1.001.002)
  9. 【转载】OpenSSL 提取 pfx 数字证书公钥与私钥
  10. 解读《德勤2017年全球CIO报告》:顶级CIO的炼成之道
  11. python中@staticmethod、@classmethod和实例方法
  12. 如何用Python计算Softmax?
  13. System.Threading.ThreadAbortException: 正在中止线程
  14. 删除排序数组中的重复数字 II
  15. 2016级算法期末上机-D.简单&#183;AlvinZH&#39;s Fight with DDLs I
  16. 模块复习 staticmethod和classmethod的区别
  17. Nginx基础笔记
  18. 01_Mac下安装homebrew
  19. [BZOJ2730]矿场搭建
  20. Java OOP——第四章 异常

热门文章

  1. 两份简单的logstash配置
  2. 湫湫系列故事——设计风景线 HDU - 4514
  3. Cannot attach the file “MvcMovie.mdf” as database “aspnet-MvcMovie”
  4. 非常实用的select下拉框-Select2.js
  5. 全屏滚动插件pagePiling.js
  6. kpm字符串匹配算法
  7. Windows下的bat原来可以为我们做很多
  8. ABAP-复制采购订单行项目到新的行
  9. mybatis批量更新策略
  10. 数据库系统原理之SQL(三)