Hexo博客Icarus主题不蒜子 UV、PV 统计数据初始化配置
文章首发于 不蒜子 UV、PV 统计数据初始化配置
适用场景
如果你有个运行的网站域名,采用了不蒜子统计 UV、PV等访客和阅读数据,但是有一天,你觉得想要换一个新的域名。当你将网站绑定到新的域名后,突然发现,所有的文章以及网站访客数据全被重置清零——重新计数了。
积累许久的老站点一下子成了新手起站,怎样合并两个域名的访客数据成了你的心头大患。在不蒜子官网上寻求无果后,你偶然来到了这里,眼睛一亮——这不正是我所需要的吗?
修改主题配置
方法一【优先推荐】
在主题文件 themes\icarus\source\js\main.js
中$('div.container div.card[data-type=archives]').addClass('is-hidden-mobile');
位置后添加如下代码:
$('div.container div.card[data-type=tags]').addClass('is-hidden-mobile');$('div.container div.card[data-type=archives]').addClass('is-hidden-mobile');+ // Insert code here// Busuanzi Initvar config = window.IcarusThemeSettings;if (typeof config !== 'undefined' && typeof config.busuanzi_site_offset_uv !== 'undefined'&& typeof config.busuanzi_site_offset_pv !== 'undefined' && config.busuanzi == true) {$(document).ready(function () {var int = setInterval(fixCount, 100);var busuanziSiteOffsetUV = parseInt(config.busuanzi_site_offset_uv);var busuanziSiteOffsetPV = parseInt(config.busuanzi_site_offset_pv);function fixCount() {if ($("#busuanzi_container_site_uv").css("display") != "none" && parseInt($("#busuanzi_value_site_uv").html()) > 0) {clearInterval(int);$("#busuanzi_value_site_uv").html(parseInt($("#busuanzi_value_site_uv").html()) + busuanziSiteOffsetUV);}if ($("#busuanzi_container_site_pv").css("display") != "none" && parseInt($("#busuanzi_value_site_pv").html()) > 0) {clearInterval(int);$("#busuanzi_value_site_pv").html(parseInt($("#busuanzi_value_site_pv").html()) + busuanziSiteOffsetPV);}}});}
+ // End of Insert code here
然后需要在 themes\icarus\layout\common\scripts.jsx
文件中下面位置插入如下代码:
const embeddedConfig = `var IcarusThemeSettings = {article: {highlight: {clipboard: ${clipboard},fold: '${fold}'}},
+ // Insert code herebusuanzi: ${config.plugins.busuanzi},busuanzi_site_offset_uv: ${config.busuanzi_site_offset_uv},busuanzi_site_offset_pv: ${config.busuanzi_site_offset_pv}};`;
+ // End of Insert code here
完成以上配置后,需要在站点配置文件_config.yml
中添加busuanzi_site_offset_uv
以及 busuanzi_site_offset_pv
两个配置项,分别代表旧站点的UV和PV数据,在渲染网页时会将旧站点的数据加到新站点数据上。
busuanzi_site_offset_uv: 1000
busuanzi_site_offset_pv: 10000
方法二【备选方案】
当然也可以直接修改 themes\icarus\layout\common\scripts.jsx
文件,但是这种方法似乎延迟较大,一些情况下页面加载较慢时会只显示新站点数据,直到页面加载完毕后才会显示叠加的数据。
+ // Insert code hereconst busuanzi_init = `if (typeof config !== 'undefined' && typeof config.busuanzi_site_offset_uv !== 'undefined'&& typeof config.busuanzi_site_offset_pv !== 'undefined' && config.busuanzi == true) {$(document).ready(function () {var int = setInterval(fixCount, 100);var busuanziSiteOffsetUV = parseInt(config.busuanzi_site_offset_uv);var busuanziSiteOffsetPV = parseInt(config.busuanzi_site_offset_pv);function fixCount() {if ($("#busuanzi_container_site_uv").css("display") != "none" && parseInt($("#busuanzi_value_site_uv").html()) > 0) {clearInterval(int);$("#busuanzi_value_site_uv").html(parseInt($("#busuanzi_value_site_uv").html()) + busuanziSiteOffsetUV);}if ($("#busuanzi_container_site_pv").css("display") != "none" && parseInt($("#busuanzi_value_site_pv").html()) > 0) {clearInterval(int);$("#busuanzi_value_site_pv").html(parseInt($("#busuanzi_value_site_pv").html()) + busuanziSiteOffsetPV);}}});}`;
+ // End of Insert code herereturn <Fragment><script src={cdn('jquery', '3.3.1', 'dist/jquery.min.js')}></script><script src={cdn('moment', '2.22.2', 'min/moment-with-locales.min.js')}></script>{clipboard && <script src={cdn('clipboard', '2.0.4', 'dist/clipboard.min.js')} defer></script>}<script dangerouslySetInnerHTML={{ __html: `moment.locale("${language}");` }}></script><script dangerouslySetInnerHTML={{ __html: embeddedConfig }}></script>
+ <script dangerouslySetInnerHTML={{ __html: busuanzi_init }}></script> {/* Insert this line code */}<script data-pjax src={url_for('/js/column.js')}></script><Plugins site={site} config={config} page={page} helper={helper} head={false} /><script data-pjax src={url_for('/js/main.js')} defer></script><script data-pjax src={url_for('/js/night.js')} defer={true}></script></Fragment>;
完成以上配置后,需要在站点配置文件_config.yml
中添加busuanzi_site_offset_uv
以及 busuanzi_site_offset_pv
两个配置项,分别代表旧站点的UV和PV数据,在渲染网页时会将旧站点的数据加到新站点数据上。
busuanzi_site_offset_uv: 1000
busuanzi_site_offset_pv: 10000
参考文章
- Zhouyang Lu, Hexo折腾系列(五)不蒜子计数器初始化, 江风引雨的小站
相关文章:
Hexo博客Icarus主题不蒜子 UV、PV 统计数据初始化配置
文章首发于 不蒜子 UV、PV 统计数据初始化配置 适用场景 如果你有个运行的网站域名,采用了不蒜子统计 UV、PV等访客和阅读数据,但是有一天,你觉得想要换一个新的域名。当你将网站绑定到新的域名后,突然发现,所有的文章…...

在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧
目录 引言 一、历史中的非对称作战:从李牧到八路军的智谋传承 李牧戍边:古代军事博弈中的资源重构 八路军的游击战:现代战争中的智慧延续 二、创业界的逆袭之道:小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …...

SQLAlchemy系列教程:如何执行原生SQL
Python中的数据库交互提供了高级API。但是,有时您可能需要执行原始SQL以提高效率或利用数据库特定的特性。本指南介绍在SQLAlchemy框架内执行原始SQL。 在SQLAlchemy中执行原生SQL SQLAlchemy虽然以其对象-关系映射(ORM)功能而闻名ÿ…...

绪论数据结构基本概念(刷题笔记)
(一)单选题 1.与数据元素本身的形式、相对位置和个数无关的是(B)【广东工业大学2019年829数据结构】 A.数据存储结构 B.数据逻辑结构 C.算法 D.操作 2.在数据结构的讨论中把数据结构从逻辑上分为(C)【中国…...
delphi 正则提取html中的内容
function ExtractTextFromHTML(const HTML: string): string; var RegEx: TRegEx; begin Result := HTML; // 移除<script>标签及其内容 Result := TRegEx.Replace(Result, <script.*?>.*?</script>, , [roIgnoreCase, roSingleLine]); // 移除<s…...
18天 - 常见的 HTTP 状态码有哪些?HTTP 请求包含哪些内容,请求头和请求体有哪些类型?HTTP 中 GET 和 POST 的区别是什么?
常见的 HTTP 状态码有哪些? HTTP 状态码用于指示服务器对客户端请求的响应结果,常见的 HTTP 状态码可以分为以下几类: 1. 信息类(1xx) 100 Continue:客户端应继续发送请求。101 Switching Protocols&…...
从0开始的操作系统手搓教程45——实现exec
目录 建立抽象 实现加载 实现sys_execv !!!提示:因为实现问题没有测试。所以更像是笔记! exec 函数的作用是用新的可执行文件替换当前进程的程序体。具体来说,exec 会将当前正在运行的用户进程的进程体&…...
Android TCP封装工具类
TCP通信的封装,我们可以从以下几个方面进行改进: 线程池优化:使用更高效的线程池配置,避免频繁创建和销毁线程。 连接重试机制:在网络不稳定时,自动重试连接。 心跳机制:保持长连接ÿ…...

解决火绒启动时,报安全服务异常,无法保障计算机安全
1.找到控制面板-安全和维护-更改用户账户控制设置 重启启动电脑解决。...

Spring Boot框架总结(超级详细)
前言 本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等,如果能耐心看完,想必会有不少收获。 一、Spring Boot基础应用 Spring Boot特征 概念: 约定优于配置&#…...
为什么要使用前缀索引,以及建立前缀索引:sql示例
背景: 你想啊,数据库里有些字段,它老长了,就像那种 varchar(255) 的字段,这玩意儿要是整个字段都拿来建索引,那可太占地方了。打个比方,这就好比你要在一个超级大的笔记本上记东西,每…...
Nuxt3 ssr build/dev时区分不同的环境
package.json "scripts": {"build": "nuxt build --dotenv .env.prod","build:dev": "nuxt build --dotenv .env.dev","postbuild": "mv -f .output ./dist/.output", //支持自定义文件名"dev&quo…...
嵌入式学习第二十四天--网络 服务器
服务器模型 tcp服务器: socket bind listen accept recv/send close 1.支持多客户端访问 //单循环服务器 socket bind listen while(1) { accept while(1) { recv/send } } close 2.支持多客户端同时访问 (并发能力) 并发服务器 socket bind …...
tcp/ip协议配置参数有哪些?tcp/ip协议需要设置的参数有哪些
TCP/IP协议的配置参数是确保网络设备能够正确接入互联网并与其他设备进行通信的关键设置。这些参数主要包括以下几个方面: 1. IP地址 定义:IP地址是网络中设备的唯一标识符,用于标识和定位设备。它由32位二进制数组成,通常采用点…...
我有点担心开始AI中台了
有个特点历史教训是很难吸取的 从大数据开始就是一窝蜂的去搞,不管有没有什么数据量。反正要来个Hadoop。其实有些企业数据一块硬盘都放得下。 微服务来了,也不管自己的系统是不是适合微服务。我个人经验得出,to B和to G的业务场景…...

《用Python+PyGame开发双人生存游戏!源码解析+完整开发思路分享》
导语 "你是否想过用Python开发一款可玩性高的双人合作游戏?本文将分享如何从零开始实现一款类《吸血鬼幸存者》的生存射击游戏!包含完整源码解析、角色系统设计、敌人AI逻辑等核心技术点,文末提供完整代码包下载!" 哈…...

优选算法系列(1. 双指针_上)
目录 双指针 一:移动零(easy) 题目链接:移动零 解法: 代码: 二:复写零(easy) 题目链接:复写零 编辑 解法: 代码: 三:快乐…...

永洪科技深度分析实战,零售企业的销量预测
随着人工智能技术的不断发展,智能预测已经成为各个领域的重要应用之一。现在,智能预测技术已经广泛应用于金融、零售、医疗、能源等领域,为企业和个人提供决策支持。 智能预测技术通过分析大量的数据,利用机器学习和深度学习算法…...

c语言笔记 函数参数的等价(上)
这三种写法在 C 语言中是等价的,因为它们都用于声明一个指向二维数组的指针,或者用于声明一个二维数组作为函数参数。它们的等价性源于 C 语言中数组和指针之间的密切关系。让我们逐一分析这三种写法: 在C语言中,当数组作为函数参…...

hive面试题--left join的坑
student 表: 课程表course: 1、key为null, 不关联 select * from student s left join course c on s.id c.s_id;2、on中过滤条件 与 where 过滤条件区别 on and c.id<>‘1001’ 先过滤右表数据,然后与左表关联 select * from student s le…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...