AI 正在绞尽脑汁想思路 ING···
AI 摘要
DeepSeek & Kimi

需更改文件的目录结构

shoka
tree .
themes/shoka/
├── _config.yml
├── languages
│    ├── en.yml
│    ├── ja.yml
│    ├── zh-CN.yml
│    ├── zh-HK.yml
│    └── zh-TW.yml
├── layout
│    └── _partials
│         └── layout.njk
├── scripts
│    └── generaters
│         └── script.js
└── source
     └── js
         └── _app
             ├── global.js
             └── pjax.js

添加到source/js/_app/global.js最后一行[1]

const isOutdated = function () {
    if (CONFIG.isOutdated.enable && LOCAL.isOutdated) {
        var times = document.getElementsByTagName("time");
        if (times.length === 0) {
            return;
        }
        var posts = document.getElementsByClassName("body md");
        if (posts.length === 0) {
            return;
        }
        var now = Date.now(); //当前时间戳
        var pubTime = new Date(times[0].dateTime); //文章发布时间戳
        if (times.length === 1) {
            var updateTime = pubTime; //文章发布时间亦是最后更新时间
        } else {
            var updateTime = new Date(times[1].dateTime); //文章最后更新时间戳
        }
        var interval = parseInt(now - updateTime); //时间差
        var days = parseInt(CONFIG.outime.days) || 30; //设置时效,默认硬编码 30 天
        //最后一次更新时间超过 days 天(毫秒)
        if (interval > days * 864e5) {
            var publish = parseInt((now - pubTime) / 864e5);
            var updated = parseInt(interval / 864e5);
            var template = LOCAL.template
                .replace("{{publish}}", publish)
                .replace("{{updated}}", updated);
            posts[0].insertAdjacentHTML("afterbegin", template);
        }
    }
};

添加到source/js/_app/pjax.jssiteRefresh函数的最后一行:

添加第 5 行
cardActive();
lazyload.observe();
isOutdated(); //判断文章时效性

添加到scripts/generaters/script.jssiteConfig变量中(具体哪一行没要求,加进去就行):

添加第 3 行
loader: theme.loader,
search : null,
isOutdated: theme.isOutdated,
valine: theme.valine,

添加到layout/_partials/layout.njkLOCAL变量中(我是加到ignores的上一行):

{%- if page.isOutdated === false %}
isOutdated: false,{%- else %}
isOutdated: true,template: "{{ __('isOutdated.template') }}",
{%- endif %}

国际化 i18n 设置,放到 YAML 文件最下面

en.yml
isOutdated:
    template: '<div class="note warning"><p><span class="label warning">Article Timeliness Alert</span><br>This is an article published {{publish}} days ago and last updated {{updated}} days ago. Some information may have changed, so please be careful to screen it.</p></div>'
ja.yml
isOutdated:
    template: '<div class="note warning"><p><span class="label warning">記事の適時性の警告</span><br> {{publish}} 日前に公開され、 {{updated}} 日前に最終更新された記事です。 一部情報が変更されている可能性がありますので、ご了承ください。</p></div>'
zh-CN.yml
isOutdated:
    template: '<div class="note warning"><p><span class="label warning">文章时效性提示</span><br>这是一篇发布于 {{publish}} 天前,最后一次更新在 {{updated}} 天前的文章,部分信息可能已经发生改变,请注意甄别。</p></div>'
zh-HK.yml
isOutdated:
    template: '<div class="note warning"><p><span class="label warning">文章時效性提示</span><br>這是一篇發佈於 {{publish}} 天前,最後一次更新在 {{updated}} 天前的文章,部分信息可能已經發生改變,請注意甄別。</p></div>'
zh-TW.yml
isOutdated:
    template: '<div class="note warning"><p><span class="label warning">文章時效性提示</span><br>這是一篇發佈於 {{publish}} 天前,最後一次更新在 {{updated}} 天前的文章,部分信息可能已經發生改變,請注意甄別。</p></div>'

然后可以通过主题配置文件_config.shoka.yml控制:

# 文章是否失效
isOutdated:
    enable: true
    days: 30 # 超过 30 天文章失效

对于单篇文章可以用Front-matter控制:

---
isOutdated: false #关闭检查文章是否失效
---

效果:

文章时效性提示
这是一篇发布于 100 天前,最后一次更新在 30 天前的文章,部分信息可能已经发生改变,请注意甄别。

§ 参考链接


  1. 通过 Hexo 5 注入器为主题添加新功能 ↩︎

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

星旅人 微信支付

微信支付

星旅人 支付宝

支付宝


在提问之前,你应该学会如何提问