个人博客-给推荐文章添加排序字段

这篇具有很好参考价值的文章主要介绍了个人博客-给推荐文章添加排序字段。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人博客-给推荐文章添加排序字段

前言

前篇文章优化了推荐文章的加载,但是呢,还是不太满意,之前是按照文章的发布日期去排序的,既然是推荐文章,还是得用一个字段去专门管理顺序。

设计思路:

给推荐文章表添加一个排序字段,然后写一个修改方法即可。

数据库字段

这里的数据类型以sqlite3为例。

字段名 类型 解释
Id INTEGER 主键
PostId TEXT 文章外键,对应文章主键id
SortOrder INTEGER 排序字段

实体类

    public class FeaturedPost
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string PostId { get; set; }
        public int SortOrder { get; set; } 
        public Post Post { get; set; }
    }

功能实现

Service层

老套路,添加接口

public interface IFPostService{
	Task<bool> UpdateSortOrderAsync(int featuredPostId, int newSortOrder);
}

实现这个接口

public class FPostService : IFPostService
{
    private readonly MyDbContext _myDbContext;
    public FPostService(MyDbContext myDbContext)
    {
        _myDbContext = myDbContext;
    }
        public async Task<bool> UpdateSortOrderAsync(int featuredPostId, int newSortOrder)
    {
        var fPost = await _myDbContext.featuredPosts.FindAsync(featuredPostId);
        if (fPost != null)
        {
            fPost.SortOrder = newSortOrder;
            await _myDbContext.SaveChangesAsync();
            return true;
        }
        return false;
    }
}

逻辑很简单,传入推荐文章的id,然后再传入新的排序字段,比如传入1就是排第一个。然后根据id去查询推荐文章,如果存在则修改排序字段,否则返回false。这里就简单的返回了一下成功和失败,如果希望更详细,可以自行琢磨。

注入服务

别忘记注入服务了

builder.Services.AddTransient<IFPostService, FPostService>();

Controller层

/// <summary>
/// 推荐博客
/// </summary>
[Authorize]  //这里指定该控制器下所有方法都需要token校验
[ApiController]
[Route("Api/[controller]")]
public class FeaturedPostController : ControllerBase{
    private readonly IFPostService _fpostService;
    public FeaturedPostController(IFPostService fpostService)
    {
        _fpostService = fpostService;
    }
    [HttpPut("{id:int}/{newSortOrder:int}")]
    public async Task<ApiResponse> UpdateSort(int id, int newSortOrder)
    {
        try
        {
            var result = await _fpostService.UpdateSortOrderAsync(id, newSortOrder);
            if (result)
                return ApiResponse.Ok("修改排序成功!");
            return ApiResponse.Error("修改排序失败");
        }
        catch (Exception ex)
        {
            return ApiResponse.Error("发生错误:" + ex.Message);
        }
    }
}

ApiResponse是大佬封装的返回类型,具体可以查看https://www.cnblogs.com/deali/p/16995384.html,这里就不做多的解释了,用自带的返回值也是可以的。

接口测试

数据库数据展示

个人博客-给推荐文章添加排序字段

失败

修改不存在的推荐文章,可以正常提示错误信息

个人博客-给推荐文章添加排序字段

成功

个人博客-给推荐文章添加排序字段

修改查询接口

让查询接口根据排序字段升序排列OrderBy(o => o.SortOrder)

用户端

public async Task<IPagedList<Post>> GetFeaturedPostsAsync(QueryParameters param)
{
    var posts =await _myDbContext.featuredPosts
        .OrderBy(o => o.SortOrder)
        .Include(fp => fp.Post)
        .ThenInclude(p => p.Categories)
        .Include(fp => fp.Post)
        .ThenInclude(p => p.Comments)
        .Select(fp => fp.Post)
        .ToPagedListAsync(param.Page, param.PageSize);
    return posts;
}

管理端

public async Task<List<FeaturedPost>> GetListAsync()
{
     return await _myDbContext.featuredPosts.Include(a => a.Post.Categories).OrderBy(o => o.SortOrder).ToListAsync();
}

后台管理系统

给请求的ts文件添加一个axios请求

import axios from "../axios"

// 修改排序字段
export const updateSort = (Id,newId) => {
  return axios({
    url: `FeaturedPost/${Id}/${newId}`,
    method: 'put'
  })
}

Vue界面修改

这里就展示部分代码了,一些简单的Element plus的应用而已

<el-table-column prop="sortOrder" label="排序" width="300" :show-overflow-tooltip="true">
    <template #default="scope">
<el-input-number
                 v-model="tableData[scope.$index].sortOrder"
                 :disabled="Show"
                 :min="1"
                 :max="999"
                 controls-position="right"
                 size="large"
                 @change="handleChange(scope.$index,scope.row)"
                 />
    </template>
</el-table-column>
const Show = ref(false)

const handleChange = async (index,item) => {
  console.log(index+" "+item.id + " " + item.sortOrder)
  Show.value = true
  try {
    var res = (await updateSort(item.id,item.sortOrder))
    if(res.statusCode === 200){
      ElMessage.success(`${res.message}`)
    }else{
      ElMessage.error(`${res.message}`)
    }
  } catch (error) {
    if (error.response && error.response.data && error.response.data.message) {
      ElMessage.error(`${error.response.data.message}`);
    } else {
      ElMessage.error("发生错误,请重试");
    }
  } finally {
    Show.value = false;
  }
}

可以在finally加入重新加载数据,但是我觉得没什么必要,毕竟还是排序修改。

界面效果展示

个人博客-给推荐文章添加排序字段

个人博客-给推荐文章添加排序字段

修改了id为9的排序字段,其实在请求还没完成的时候,这个数字选择框是不能第二次修改的,关键代码:disabled="Show",修改完成才能进行二次修改。

完工

最近文章发布有点频繁,是时候断更一会儿了😴文章来源地址https://www.toymoban.com/news/detail-499724.html

到了这里,关于个人博客-给推荐文章添加排序字段的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET 个人博客-添加RSS订阅功能

    个人博客系列已经完成了 留言板 文章归档 推荐文章优化 推荐文章排序 博客地址:https://pljzy.top 然后博客开源的原作者也是百忙之中添加了一个名为 RSS订阅 的功能,那么我就来简述一下这个功能是干嘛的,然后照葫芦画瓢实现一下。 来自 chatGPT 的回答 网站的RSS订阅是一种

    2024年02月11日
    浏览(31)
  • 1.php开发-个人博客项目&文章功能显示&数据库操作&数据接收

    (2022-day12) 1-php入门,语法,提交 2-mysql 3-HTML+css ​ 博客-文章阅读功能初步实现 实现功能: 前端文章导航,点入内容显示,更改ID显示不同内容 实现步骤: 1-前端页面显示,编写(html,css) 2-数据库文章数据导入(mysql操作) 3-php操作mysql编写-php变量提交 ​ 搜:html横向导

    2024年01月20日
    浏览(45)
  • 博客系统(升级(Spring))(四)(完)基本功能(阅读,修改,添加,删除文章)

    博客系统是干什么的? CSDN就是一个典型的博客系统。而我在这里就是通过模拟实现一个博客系统,这是一个较为简单的博客系统,但是主要功能一个不缺,不过就是 UI 有些 low,我学习前端是为了写后端更加顺手。不至于前后端完全分离,但是有个问题设计的 web 页面不是很

    2024年02月09日
    浏览(34)
  • 手把手教你使用Hexo+GitHub搭建个人博客并发布文章(附常见问题解决方法)

    本教程使用GitHub自带的GitHub pages来生成静态个人博客,而Hexo可以更换各种好看的主题,而且都是免费的,花一点时间就可以打造出自己独有的个人博客。 Hexo这个有力的工具可以让我们专注于写出一篇博客而不需要关心如何编写html和CSS,再如何形成一个网站,它可以根据ma

    2024年02月04日
    浏览(44)
  • 个人博客系统|基于Springboot的个人博客系统设计与实现(源码+数据库+文档)

    个人博客系统目录 目录 基于Springboot的个人博客系统设计与实现 一、前言 二、系统功能设计  三、系统实现 1、管理员功能实现 (1)用户管理 (2)文章分类管理 (3)公告信息管理 (4)博主信息管理 2、博主功能实现 (1)博主文章管理 3、用户功能实现 (1)博主文章信

    2024年04月13日
    浏览(35)
  • 什么?博客园主题比我的个人博客好看??

    最近逛博客园,发现我的园子还挺好看,但是还不够好看,所以通过我百度发现SimpleMemory主题还可以继续添加新的东西,当然这些东西不一定非得用SimpleMemory主题才行,但是搭配SimpleMemory主题是真的好看呀(比我的博客好看多了)。 访问不进去GitHub,又不想花钱使用魔法,看

    2024年02月16日
    浏览(26)
  • 个人博客系统【项目篇】

    1.CSS 2. JS 3.HTML 4.数据库 5.pom.xml image  

    2024年02月11日
    浏览(44)
  • 搭建个人博客详细教程

    由于国外的github page访问总是非常慢的,本文选择国内开源代码托管平台码云,因而可以在国内搭建访问与SEO检索都优于GitHub的个人网站。自己亲手勉强搭起个人博客,首先感谢木千之博主的详细教程,给了清晰的思路,写下这篇博客将详细过程记录,希望帮助更多的人,减

    2023年04月08日
    浏览(39)
  • ❤ 个人博客的搭建和设置

    闲暇时候自己试着做了一个自己的个人博客,博客使用的Github进行托管,还在阿里云买了属于自己的域名 具体步骤如下 git --version 4、进入自己想要搭建的放在Github的文件夹 一、clone仓库到本地 git clone 自己的代码仓库地址 git clone 你的代码仓库地址 二、添加自己的东西到文件

    2024年02月03日
    浏览(83)
  • HTML设计个人博客页面

    以下是一个简单的HTML代码示例,用于创建一个具有学术风格的个人博客主页: 在这个示例中,我们首先使用meta标签设置页面的字符集和视口大小。然后,我们导入了Google字体“Lato”,并定义了一些基本的样式,包括背景色、字体、字号、行高和颜色。 页面主体包括一个名

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包