这篇主要是一些个性化定制和优化,包括添加备案信息、运行时间统计、访问统计等。

添加备案信息

配置备案号

  1. 在hugo.toml中添加备案配置

    # 页脚配置
    [params.footer]
      text = '<a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener">备案号:冀ICP备19017061-1号</a>'
    

    ⚠️ 注意:请替换为你自己的真实备案号

  2. 确保HTML渲染支持: 在配置文件中添加:

    # Markup配置 - 支持HTML渲染
    [markup]
      [markup.goldmark]
        [markup.goldmark.renderer]
          unsafe = true
    

    💡 配置更新:在hugo.toml文件中添加备案号配置和HTML渲染支持。备案号使用HTML链接格式,unsafe=true允许在Markdown中使用HTML标签。

更新页脚模板

  1. 编辑页脚模板: 更新 layouts\partials\footer.html

    {{- if not (.Param "hideFooter") }}
    <footer class="footer">
        {{- if site.Copyright }}
        <span>{{ site.Copyright | markdownify }}</span>
        {{- else }}
        <span>&copy; {{ now.Year }} <a href="{{ "" | absLangURL }}">{{ site.Title }}</a></span>
        {{- end }}
        {{- with site.Params.footer.text }}
            {{- print " · "}}
            {{ . | markdownify }}
        {{- end }}
    
        <span>
            {{- print " · "}}
            Powered by
            <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
            <a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
        </span>
    </footer>
    {{- end }}
    

    💡 页脚效果:更新后的页脚会显示版权信息、可点击的备案号链接(指向工信部网站)、以及技术支持信息,布局简洁清晰。

添加运行时间统计和访问统计

现在来创建一个包含运行时间和访问统计的两行布局页脚。

完整的页脚代码

layouts\partials\footer.html 完全替换为以下内容:

{{- if not (.Param "hideFooter") }}
<footer class="footer">
    <!-- 第一行:版权、备案、技术支持 -->
    <div class="footer-line">
        {{- if site.Copyright }}
        <span>{{ site.Copyright | markdownify }}</span>
        {{- else }}
        <span>&copy; {{ now.Year }} <a href="{{ "" | absLangURL }}">{{ site.Title }}</a></span>
        {{- end }}
        {{- with site.Params.footer.text }}
            <span> | {{ . | markdownify }}</span>
        {{- end }}
        <span> | Powered by
            <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
            <a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
        </span>
    </div>

    <!-- 第二行:运行时间和访问统计 -->
    <div class="footer-line">
        <span>网站已运行
            <span id="runtime-days">0</span>            <span id="runtime-hours">00</span>            <span id="runtime-minutes">00</span>            <span id="runtime-seconds">00</span>        </span>
        <span> | 总访问量 <span id="site-pv">0</span></span>
        <span> | 访客数 <span id="site-uv">0</span></span>
    </div>
</footer>

<!-- 运行时间和访问统计脚本 -->
<script>
// 网站启动时间(修改为你的实际上线时间)
const SITE_START_TIME = new Date('2025-07-20T00:00:00+08:00');

// 运行时间计算函数
function updateRuntime() {
    const now = new Date();
    const diff = now - SITE_START_TIME;

    if (diff < 0) return; // 如果时间有问题,直接返回

    const days = Math.floor(diff / (1000 * 60 * 60 * 24));
    const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
    const seconds = Math.floor((diff % (1000 * 60)) / 1000);

    // 更新DOM元素
    const daysEl = document.getElementById('runtime-days');
    const hoursEl = document.getElementById('runtime-hours');
    const minutesEl = document.getElementById('runtime-minutes');
    const secondsEl = document.getElementById('runtime-seconds');

    if (daysEl) daysEl.textContent = days;
    if (hoursEl) hoursEl.textContent = String(hours).padStart(2, '0');
    if (minutesEl) minutesEl.textContent = String(minutes).padStart(2, '0');
    if (secondsEl) secondsEl.textContent = String(seconds).padStart(2, '0');
}

// 页面加载完成后初始化运行时间
document.addEventListener('DOMContentLoaded', function() {
    console.log('开始运行时间统计');

    // 立即执行一次
    updateRuntime();

    // 每秒更新一次
    setInterval(updateRuntime, 1000);
});

// 访问统计初始化
document.addEventListener('DOMContentLoaded', function() {
    // 获取或初始化访问统计
    let pv = parseInt(localStorage.getItem('site-pv') || '0') + 1;
    let uv = parseInt(localStorage.getItem('site-uv') || '0');

    // 检查是否是新访客(按天计算)
    const today = new Date().toDateString();
    const lastVisit = localStorage.getItem('last-visit');
    if (lastVisit !== today) {
        uv += 1;
        localStorage.setItem('last-visit', today);
    }

    // 保存统计数据
    localStorage.setItem('site-pv', pv.toString());
    localStorage.setItem('site-uv', uv.toString());

    // 更新显示
    const pvEl = document.getElementById('site-pv');
    const uvEl = document.getElementById('site-uv');

    if (pvEl) pvEl.textContent = pv;
    if (uvEl) uvEl.textContent = uv;

    console.log('访问统计:', 'PV:', pv, 'UV:', uv);
});
</script>

<!-- 页脚样式 -->
<style>
.footer {
    text-align: center;
    padding: 20px 0;
    border-top: 1px solid var(--border);
}

.footer-line {
    margin: 5px 0;
    font-size: 14px;
    color: var(--secondary);
}

.footer a {
    color: var(--primary);
    text-decoration: none;
}

.footer a:hover {
    text-decoration: underline;
}
</style>

{{- end }}

代码说明

这个页脚包含了以下功能:

第一行显示

  • 版权信息:© 2025 网站名称
  • 备案号:可点击的备案号链接
  • 技术支持:Hugo & PaperMod 链接

第二行显示

  • 运行时间:实时显示网站运行的天、时、分、秒
  • 总访问量:基于localStorage的页面访问统计
  • 访客数:按天计算的独立访客统计

技术特点

  • 使用 SITE_START_TIME 常量设置网站启动时间
  • 运行时间每秒自动更新
  • 访问统计数据存储在浏览器本地
  • 样式简洁,不过度美化
  • 包含错误处理和调试信息

测试页脚功能

验证运行时间

  1. 检查时间显示

    • 打开网站首页
    • 观察页脚第二行的运行时间
    • 确认秒数每秒跳动
  2. 修改起始时间: 如果需要修改网站启动时间,编辑页脚模板中的这一行:

    const SITE_START_TIME = new Date('2025-07-20T00:00:00+08:00');
    

    将日期改为你的实际上线时间。

这个页脚设计简洁实用,不会过度占用页面空间,同时提供了必要的信息展示。

常见问题解答

Q: 如何修改运行时间的起始日期?

A: 编辑页脚模板中的 SITE_START_TIME 变量,设置为你的网站实际上线时间。例如:const SITE_START_TIME = new Date('2025-07-20T00:00:00+08:00');

Q: 备案号必须添加吗?

A: 如果你的网站部署在中国大陆服务器,根据法律要求必须添加备案号。

Q: 访问统计数据存储在哪里?

A: 访问统计数据存储在浏览器的localStorage中,这是一个简单的本地统计方案。如果需要更准确的统计,建议使用Google Analytics等专业工具。


教程系列回顾