公司十周年,要做一条能滚的时间轴

网站大事记 使用文档
网站大事记 使用文档

周年庆的页面上要放一条从创立到现在的里程碑,设计稿已经出了:左边一列年份,右边是每个年份下的几件事,往下滚的时候左边年份跟着高亮。

网站大事记(CmsEvent)就是为这个页面做的。它只有两张表、两个后台页面、一个前台页面,没有其他依赖,装完访问 /cms_event。

数据是怎么组织的

第一层是「年份」,表 cms_event_category,字段是 pid、sort、title(最长 20 字符)。后台叫「年份管理」,树形展示,最多两级,所以可以做「2023 年」下面挂「2023 上半年」这种结构,但通常只用到一级。

第二层是「事件」,表 cms_event,字段只有四个:categoryId、sort、time(最长 20 字符的字符串)、content(富文本)。

注意 time 是字符串不是日期。你可以写「2023.05」,也可以写「五月」或者「Q2」,展示成什么样由你输入什么决定,系统不做解析也不做排序。事件的先后顺序靠 sort 字段,后台开了拖拽排序,默认按 sort 升序。

年份那列是永久缓存的

年份列表走 Cache::rememberForever,缓存键是 CmsEventCategories,按 sort 倒序取全表。只有在后台增删改年份时才会触发清缓存。

这意味着:直接改数据库里的年份,前台不会更新,要等缓存被清掉。排查「改了年份前台没变」这类问题时,先去后台随便保存一次年份触发清缓存,比查 SQL 快。

前台大事记页面,左侧为年份导航,右侧是按年份分组的事件卡片

一个容易踩的登录问题

前台路由是这样注册的:如果 Member 模块处于启用状态,路由会套上会员登录中间件。

也就是说,装了会员模块之后,游客访问 /cms_event 会被跳到登录页,而不是看到时间轴。这段逻辑写在路由文件里,没有配置项可以关。

如果你的大事记是给所有人看的,而站点又装了 Member,要么把页面内容搬到别处(比如 Document 模块的一页),要么改这个路由文件把中间件去掉。1.1.1 版本修的是 Member 模块不存在时的报错,这个中间件行为本身还在。

富文本内容的取舍

事件内容是富文本,可以放图。但时间轴上每条事件通常只占一小块区域,塞大图会把版面撑散。比较稳的做法是内容区只放文字,把图片交给背景或 Banner 模块。

另外内容区没有单独的标题字段,time 那一项实际上承担了标题的作用。想让每条事件有个名字,就把名字写进 time 里,比如「2019.09 首个版本发布」。

适合与不适合

适合:企业历程、产品版本记录、项目里程碑这类「内容不多、结构固定、一年更新几次」的页面。维护成本很低,运营自己就能加。

不适合:内容量大或者需要频繁更新的时间线。这个模块没有分页,前台一次把全部事件取出来(CmsEventUtil::all()),几十条没问题,几百条会让页面变长、首屏变慢。也没有搜索、标签、封面图,做不了「点开看详情」的二级页。

装完之后

先建年份,再录事件。年份下拉是树形选择,没有年份时事件保存不了。

然后确认两件事:一是年份有没有按倒序排(sort 越大越靠前,新年份要给更大的 sort 值);二是在装了会员模块的站点上,用未登录的浏览器访问一次 /cms_event,看是不是被挡住了。

更新: 2026-11-12 17:37:48
QQ
微信
客服