个人博客-首页排版优化

优化计划

  • 置顶3个且可滚动或切换
  • 推荐改为4个,然后新增历史文章,将推荐的加载更多放入历史文章,按文章发布时间降序排列。
  • 标签功能,可以为文章贴上标签
  • 推荐点赞功能

本篇文章优化置顶

原先置顶如图

新置顶图

可以看到下方多了3个按钮,可以通过按钮切换置顶,然后我设置了每3秒自动切换。

思路

用bootstrap5提供的Carousel组件去完成,首先需要将之前返回一条信息的文章置顶接口换成一个集合,然后放入组件就行了

代码实现

将HomeController中的Index方法的TopPost = _TopPostService.GetTopOnePost()换成集合就行了

public async Task<IActionResult> Index()
{
HomeViewModel homeView = new HomeViewModel()
{
FeaturedPhotos = _fPhotoService.GetFeaturePhotos(),
FeaturedCategories = _fCategoryService.GetFeaturedCategories(),
TopPost = _TopPostService.GetTopOnePost(),
FeaturedPosts = await _PostService.GetFeaturedPostsAsync(new QueryParameters
{
Page = 1,
PageSize = 8,
}),
Links = await _linkService.GetAll(),
Notices = await _noticeService.GetAllAsync(),
HomePost = await _articelsService.HomePostAsync(),
// MaxPost = await _articelsService.MaxPostAsync()
};
return View(homeView);
}

接口和服务

public interface ITopPostService
{
// Post GetTopOnePost();
Task<List<Post>> GetTopOnePostAsync();
} public async Task<List<Post>> GetTopOnePostAsync()
{
var topPosts = await _myDbContext.topPosts.Include(t => t.Post).ToListAsync(); if (topPosts.Count == 0)
{
return null;
}
return topPosts.Select(tp => tp.Post).ToList();
}

Rezor页面代码

bootstrap5提供的组件使用起来方便

  1. data-bs-ride: 设置为carousel,表示启用自动播放幻灯片。
  2. data-bs-interval: 设置自动切换幻灯片之间的时间间隔,单位为毫秒。

将外层div的id设置为myCarousel,然后将切换按钮的data-bs-target设置为#myCarousel就能与之绑定,data-bs-slide这个属性用于指定按钮的行为,即指定要切换到前一个或后一个幻灯片。它可以设置为prev表示切换到前一个幻灯片,或者设置为next表示切换到后一个幻灯片。

<div id="myCarousel" class="carousel carousel-dark slide" data-bs-ride="carousel" data-bs-interval="3000">
<div class="carousel-indicators" style="bottom: 10px;">
@foreach (var item in Model.Select((value, index) => new { Value = value, Index = index }))
{
<button type="button" data-bs-target="#myCarousel" data-bs-slide-to="@item.Index" class="@if (item.Index == 0) { <text>active</text> }" aria-label="Slide @item.Index + 1"></button>
}
</div>
<div class="carousel-inner">
@foreach (var item in Model.Select((value, index) => new { Value = value, Index = index }))
{
<div class="carousel-item @if (item.Index == 0) { <text>active</text> }">
<div class="row rounded mb-4 shadow-sm box border" style="margin-left:3px;margin-right:3px">
<div class="col-md-6">
<div class="p-4 p-md-5 mb-4 text-black">
<div class="display-6 fst-italic">@item.Value.Title</div>
<p class="lead my-3">@item.Value.Summary</p>
<p class="lead mb-0">
<a class="text-black fw-bold" asp-controller="Blog" asp-action="Post" asp-route-id="@item.Value.Id">
Continue reading...
</a>
</p>
</div>
</div>
<div class="col-md-6" style="padding-right:0">
<img class="bd-placeholder-img img-fluid no-padding rounded" style="object-fit: cover; object-position: center;width:100%;height:500px"
src="@Url.Action("GetRandomImageTop", "PicLib", new { seed = item.Value.Id })" alt=""/>
</div>
</div>
</div>
}
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#myCarousel" data-bs-slide="prev" style="width:5%">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#myCarousel" data-bs-slide="next" style="width:5%">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
@await Html.PartialAsync("Widegets/HomeTopPostCard", Model.TopPost)

查看完整代码

参考资料

.NET 个人博客-首页排版优化的更多相关文章

  1. Linux下使用 github+hexo 搭建个人博客04-next主题优化

    上篇我们说了 hexo 的优化,针对的站点的优化. 本篇讲解 next 主题的优化,包括:使用语言.前端页面显示宽度.菜单.侧栏.头像.添加或取消动画效果.打赏功能等等. 让页面排版更符合我们所要的功 ...

  2. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十七 ║Vue基础:使用Vue.js 来画博客首页+指令(一)

    缘起 书说前两篇文章<十五 ║ Vue前篇:JS对象&字面量&this>和 <十六 ║ Vue前篇:ES6初体验 & 模块化编程>,已经通过对js面向对 ...

  3. Hexo + Github 个人博客设置以及优化

    原文地址: Hexo + Github 个人博客设置以及优化 一.博客设置 分类.标签云.关于等页面 在站点目录下分别执行: hexo new page "categories" ...

  4. 使用django开发博客过程记录2——博客首页及博客详情的实现

    1.什么是CBV(Class-based views) 2.博客首页及博客详情实现 1.什么是CBV 什么是CBV?说白了就是以前是视图为处理请求返回响应的函数,有了cbv之后我们就可以用类处理请求和 ...

  5. 【Android 我的博客APP】1.抓取博客首页文章列表内容——网页数据抓取

    打算做个自己在博客园的博客APP,首先要能访问首页获取数据获取首页的文章列表,第一步抓取博客首页文章列表内容的功能已实现,在小米2S上的效果图如下: 思路是:通过编写的工具类访问网页,获取页面源代码, ...

  6. 巨高兴,偶的文章 “如何在服务器上配置ODBC来访问本机DB2for Windows服务器”被推荐至CSDN博客首页

    非常高兴,偶的文章 "如何在服务器上配置ODBC来访问本机DB2for Windows服务器"被推荐至CSDN博客首页,截图留念.                  文章被推荐在C ...

  7. django博客项目5:博客首页视图(2)

    真正的 Django 博客首页视图 在此之前我们已经编写了 Blog 的首页视图,并且配置了 URL 和模板,让 Django 能够正确地处理 HTTP 请求并返回合适的 HTTP 响应.不过我们仅仅 ...

  8. django博客项目4:博客首页视图(1)

    Web 应用的交互过程其实就是 HTTP 请求与响应的过程.无论是在 PC 端还是移动端,我们通常使用浏览器来上网,上网流程大致来说是这样的: 我们打开浏览器,在地址栏输入想访问的网址,比如 http ...

  9. Django 博客首页视图

    Django 处理 HTTP 请求 Web 应用的交互过程其实就是 HTTP 请求与响应的过程.无论是在 PC 端还是移动端,我们通常使用浏览器来上网,上网流程大致来说是这样的: 我们打开浏览器,在地 ...

  10. Linux下使用 github+hexo 搭建个人博客03-hexo配置优化

    上两张文章,我们说了 hexo 部署.主题的切换.博文的创建.MarkDown 简单使用和 hexo 部署到 GitHub Pages. 也说了我们会使用 next 主题做为我们后期博客的使用和维护. ...

随机推荐

  1. WebSocket集群分布式改造:实现多人在线聊天室

    前言 书接上文,我们开始对我们的小小聊天室进行集群化改造. 上文地址: [WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket) 本文内容摘要: ...

  2. 【爬虫GUI】YouTube评论采集软件,突破反爬,可无限爬取!

    目录 一.背景介绍 1.1 软件说明 1.2 效果演示 二.科普知识 2.1 关于视频id 2.2 关于评论时间 三.爬虫代码 3.1 界面模块 3.2 爬虫模块 3.3 日志模块 四.获取源码及软件 ...

  3. 书生浦语大模型全链路开源体系-书生浦语大模型实战营学习笔记1&大语言模型2

    大语言模型-2.书生浦语大模型全链路开源体系 书生浦语大模型实战营学习笔记-1.认识书生浦语大模型全链路开源体系 本系列随笔学习搬运第二期书生浦语大模型实战营的相关内容,通过使用InternLM的一套 ...

  4. LVS负载均衡(2)-- NAT模型搭建实例

    目录 1. LVS NAT模型搭建 1.1 NAT模型网络规划 1.2 NAT模型访问流程 1.3 NAT模型配置步骤 1.3.1 ROUTER设备配置 1.3.2 后端nginx服务器配置 1.3. ...

  5. Gradle常用功能拾掇

    介绍 Gradle 是一个基于groovy动态语言的java项目管理工具,灵活性和速度好于java,他的build脚本完全可以以写groovy代码的方式来实现,所以灵活性很高,当然也就比maven的x ...

  6. IDEA 2020 版配置VUE

    找到IDE工具栏,就是启动项目的run那里 点击下拉框,找到Eidt Confiuration,选择 选择小加号 选取npm 设置npm页,完成后,点击apply run npm ,如图选择run或者 ...

  7. ETSI GS MEC 013,UE 位置 API

    目录 文章目录 目录 版本 功能理解 Relation with OMA APIs Relation with OMA API for Zonal Presence Relation with OMA ...

  8. NumPy 数组排序、过滤与随机数生成详解

    NumPy 数组排序 排序数组 排序数组意味着将元素按特定顺序排列.顺序可以是数字大小.字母顺序.升序或降序等. NumPy 的 ndarray 对象提供了一个名为 sort() 的函数,用于对数组进 ...

  9. 基于 Go 的 Web 框架调研

    基于 Go 的 Web 框架调研 概述 调研总体目标 找出适合企业应用后台研发的 Go Web 框架 调研考察方向 项目完善程度: 功能完善: 路由, 模板, 插件/扩展, ORM, 命令行工具, 日 ...

  10. k8s 怎么精准获取deployment关联的pods?

    标签获取 我们获取那些pods属于某个deployment时最先想到的可能是通过标签获取,其实这个是不准确的.因为标签并不是唯一的,也就是说不同deployment其实是能有相同标签的. replic ...