QQ扫一扫联系
通常的做法是找设计师做一张图,把一句 slogan 压上去,然后这张图在首页挂一年。如果想要的是「每次打开都不一样」,那就不只是一张图的事了,还得有一个句子来源。
一言页面(Words)是一个很小的模块,只做一件事:访问 /words 时,全屏背景图上打一句话,句子每次随机。
控制器里只有一行关键调用,去请求一言(hitokoto)的公开接口,取回两个字段:
hitokoto:句子本身from:出处拿到之后写进 words_history 表,字段是 words(最长 180 字符)、from(最长 100 字符)和 updateTime。写入逻辑是「先按句子更新,更新不到就插入」,所以同一句话第二次出现时只刷新时间,不会多一条记录。
后台「一言内容」页能看到这张表,列为 ID、文字、来源、最近显示,可以按 ID 精确查、按文字模糊查。它本质上是个流水账:句子不是你录进去的,是访问者打开页面时攒下来的。
缓存是 60 秒。 WordsUtil::random() 外面套了一层缓存,60 秒内所有访问者看到的都是同一句。你刷新页面看不到新句子,不是接口坏了,是缓存没过。想让它换一句,等一分钟。
背景走的是 Vendor 的随机图片驱动。设置页上有一项「随机图片驱动」,下拉选项来自系统里注册的所有驱动,取的是背景图那一类。换驱动就换图源,不用改代码。
页面本身是 100vh 的全屏容器,背景图 cover 铺满,上面压一层黑色半透明遮罩,保证白字在任何图上都能看清。句子用 h1,2.5rem 居中;下面一行是出处,格式是「——「出处」」。

设置页第一项是「开始屏幕链接」,默认关闭。打开之后会出现两栏:链接文字(默认「首页」)和链接地址(默认站点首页)。
按钮样式是描边胶囊:透明底、2px 白边、圆角,距离句子 6.25rem。它的作用是给这个全屏页一个出口,否则用户看完一句话只能点浏览器后退。
样式里有一个 max-width:50rem 的断点,在这个断点下:
第二条要留意:不管后台选了什么随机图片驱动,窄屏下用的都是 CSS 里那个固定地址。如果你换了图源或者那个第三方服务不可用,手机上会变成空白背景,而 PC 上是正常的。这不是配置能改的,要改只能动模板。

把它当成内容运营来用是不行的。句子不可控,你没法审核下一句是什么,也没法保证不出现跟品牌调性冲突的内容。需要可控文案的话,自己维护一张句子表比这个模块更靠谱,Words 的表结构并不复杂,照着改一个本地版本成本很低。
另外整个页面依赖外部接口。接口不通时控制器会抛业务异常,页面直接报错,没有降级文案。如果你的站点对可用性要求高,不建议把它放在关键路径上。
访问 /words 看一眼。1.4.0 之后这个路由只接受 GET 请求,之前是 GET 和 POST 都收,如果你有旧代码在 POST 这个地址,升级后会出现方法不允许。
然后去后台「一言内容」页点右上角那个齿轮按钮,把链接开关打开、填上要跳的地址。这个设置页是弹窗形式,藏在列表页右上角,第一次容易找不到。