layui登录页面模板_(eblog)6、博客分类填充、登录注册逻辑

本文介绍了eblog项目中博客分类的展示、登录注册逻辑的实现,以及Shiro页面标签的使用。内容包括首页内容填充,如列表分页、导航分类和博客详情,以及用户状态部分的登录和注册逻辑。使用了layui的分页插件和Freemarker宏进行前端展示,并集成Shiro进行权限控制。
摘要由CSDN通过智能技术生成

小Hub领读:

继续我们的eblog,今天来完成博客分类的展示,还有登录注册!


项目名称:eblog

项目 Git 仓库:https://github.com/MarkerHub/eblog(给个 star 支持哈)

项目演示地址:https://markerhub.com:8082

前几篇项目讲解文章:

1、(eblog)Github 上最值得学习的 Springboot 开源博客项目!

2、(eblog)小 Hub 手把手教你如何从 0 搭建一个开源项目架构

3、(eblog)整合Redis,以及项目优雅的异常处理与返回结果封装

4、(eblog)用Redis的zset有序集合实现一个本周热议功能

5、(eblog)自定义Freemaker标签实现博客首页数据填充


这一次作业我们来完善一下首页中的内容,比如我们的首页文章列表,首页导航分类,分类列表,文章详情。

同时,上一期的作业中我写了不少bug,然后我又偷偷改了很多,都是比较细的,我可能不会全部都写出来,大家如果不知道我改了哪里,有两个办法:

  • 1、看git的提交记录,点击一下文件就有对比出来

f58f12061c5b885c93aa7e867e5ad6f4.png

  • 2、运行我的项目和你的项目,链接统一数据库,判断页面的内容显示和功能是否一致,不一致说明我已经偷偷改了一些不为人知的bug了。

1、首页内容填充

列表分页

578d574f6bb80ce287bc435a904cbb34.png

这里说的列表分页讲得是首页的内容列表,可以看到列表内容每一行的内容其实和置顶的列表是一致的,所以原来的sql我们是可以再应用。包括后面我们点击具体导航分类的列表也是一致的。内容一致,我们就可以想到,首先前端的列表我们可以单独提出来作为一个模板,这样所有的地方都只修改一次,可以控制所有的地方了。

然后后端的处理方式有两种:

  • 1、延用我们freemarker标签的方式

  • 2、使用controller中传送数据到前端

标签的方式我们之前已经学习过了,那么我们这次在controller中再提交数据到前端。

首先来看下首页的controller

@RequestMapping({ "", "/", "/index"})

public String index () {

IPage results = postService.paging(getPage(), null, null, null, null, "created");

req.setAttribute("pageData", results);

return "index";

}

上面的postService.paging就是我们之前写过的,只不过参数又多了几个,我偷偷改的。给你看看最新的版本吧

@Override

@Cacheable(cacheNames = "cache_post", key = "'page_' + #page.current + '_' + #page.size " +

"+ '_query_' +#userId + '_' + #categoryId + '_' + #level + '_' + #recommend + '_' + #order")

public IPage paging(Page page, Long userId, Long categoryId, Integer level, Boolean recommend, String order) {

if(level == null) level = -1;

QueryWrapper wrapper = new QueryWrapper<Post>()

.eq(userId != null, "user_id", userId)

.eq(categoryId != null && categoryId != 0, "category_id", categoryId)

.gt(level > 0, "level", 0)

.eq(level == 0, "level", 0)

.eq(recommend != null, "recommend", recommend)

.orderByDesc(order);

IPage<PostVo> pageData = postMapper.selectPosts(page, wrapper);

return pageData;

}

其实就是加多了几个参数,为了应付更多的场景。回到刚才说的index方法,有个getPage()我写在了BaseController,这是分页数据的获取封装,获取前端的分页信息,然后封装成poge对象。然后给一下参数默认值。

public Page getPage() {

int pn = ServletRequestUtils.getIntParameter(req, "pn", 1);

int size = ServletRequestUtils.getIntParameter(req, "size", 10);

Page page = new Page(pn, size);

return page;

}

然后可以看到index中,我传了个pageData对象到前端,我们再看看前端。

class="fly-list">

@listing>

#list>

找找中间的内容部分,然后写成了上面那样,因为我把记录列表封装成了宏(macro) e7f570b8a0024888df9db09303cd242e.png

具体的内容就是这样

href="${base}/user/${post.authorId}" class="fly-avatar">

src="${post.authorAvatar}" alt="${post.authorName}">

class="layui-badge">${post.categoryName}

href="${base}/post/${post.id}">${post.title}

class="fly-list-info">

href="${base}/user/${post.authorId}" link>

${post.authorName}

class="layui-badge fly-badge-vip">VIP${post.authorVip}

${post.created?string('yyyy-MM-dd')}

class="fly-list-nums">

class="iconfont icon-pinglun1" title="回答"> ${post.commentCount}

class="fly-list-badge">

class="layui-badge layui-bg-black">置顶#if>

class="layui-badge layui-bg-red">精帖#if>

#macro>

关于freemarker标签macro的用法,不懂的就去百度一下啦,貌似之前我们说过是不是?忘了~

...#macro>

代表定义了一个macro名词叫listing,参数是post,标签内容就是宏的内容。需要调用这个宏的地方直接使用标签就可以,所以你就看到了我刚才的写法。

82695688d5f4b41e58c0959b974fbf02.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值