
普通视图
昨天以前大峰笔记
徐州客户
周三上午9点收到客户信息,疑似产品问题,我问了几个可能发生的情况,都说没有,那就奇怪了,我想着干脆去一趟吧,无锡到徐州,5小时路程,10点出发的,买了10只大闸蟹礼盒(5雌5雄,55元/只),到客户公司已经下午3点,我检查了一下产品,确实坏了,但不是我方原因造成的,给对方指出了问题所在,给我的感觉是,客户没觉得这事很严重,那就好。拉着我一顿闲扯,说晚上要带我去吃当地有名的烧烤,徐州烧烤,喝点酒,拿了瓶黄酒出来,他说“只能喝1两,剩下的你喝”,结果他真是喝了一两,脸红了。。烧烤味道不错,肉质很新鲜,价格也便宜,上了好几盘羊肉串,没吃完。周四一早就回来。
首页,有过留言的博友链接做了一些修改,把头像改成名字显示,因为有些头像看着不知道是谁,名字就非常清晰直接,看着清爽,留言数量大于等于50条的,颜色为蓝底,大于等于100条的,颜色为红底。
20241110
2024年11月10日,晚饭喝了半瓶红酒,回到家就开始头疼,洗完澡在沙发上躺了一会,没想到睡着了,儿子来叫我,我居然没听见,从来不会这样,不知道怎么回事,难道喝了劣质酒?睡了一觉后还是那样,不舒服,今早起来还是有点,上午又睡了2小时,直到中午饭后才算好。下次红酒还是不要喝了,不会分辨好坏。
今天尧哥去拈花湾秋游,周末给他准备了一些吃的,放书包,带了一些零钱,天气不错,暖阳,应该玩的很快乐。上周有人抓到一只甲鱼,买来红烧,尧哥要吃的,不排斥,6年级暑假,小家伙长高不少,除了虾不大愿意吃,其它都还行。
小区里面有好多野猫,越生越多,有个别爱猫人士在夜间角落里偷偷喂着一些吃的。业主群里面好些人都比较反感这事,包括我,白天因为上班上学,所以没什么感觉,晚上,猫们就开始出来闲逛,有的在负一停车场瞎逛,有的甚至把人家的车搞坏(哪里的线路咬断抓破),还有好几只在垃圾桶旁转悠,我有几次去扔垃圾,那个猫都不怕人的,往人这边走,还龇牙咧嘴叫,像要马上跳到身上来一样,我感觉很讨厌,有一只这样,被我打了一下,踢它,跑掉了,如果是小孩的话,非常危险,病毒不说,爪子很锋利,只得跟物业多反应反应怎么处理这些猫。
关于博友链接
抱歉各位,我换一种方式显示博友的链接,之前是单独一个页面显示,现在改为首页隐藏显示,点击★下划显示来留言过的所有访问者,并有相关链接,右上角是留言次数,自动记录,按留言时间顺序排列,原有页面的链接全部移至浏览器收藏夹并多端同步,会不定期浏览访问,嗯,如果您对我的这个操作介意的话,可以单方面删除我,愿博客和折腾继续,愿生活愉快,一切顺利。
2024年11月28日更新:
为了实现 仅显示最近6个月内有新留言的访客,我们需要对代码进行一些修改,基于评论时间过滤出符合条件的评论者,并只显示最近6个月内有新留言的访客。这个逻辑是通过获取每个评论的时间,并与当前时间进行比较来实现的。
主要修改点:
- 计算6个月前的时间戳。
- 过滤掉6个月前没有新留言的访客。
- 显示符合条件的访客信息。
完整代码修改:
php
<?php
// 获取所有评论并按照评论ID排序
$comments = get_comments(array(
'number' => 99999, // 获取评论数量
'status' => 'approve', // 只获取已经被批准的留言
'order' => 'DESC', // 倒序排列
'author__not_in' => array(1), // 排除博主的ID,这里假设博主ID是1
));
// 用来存储不重复的评论者信息及留言次数
$unique_comments = array();
// 获取当前时间戳(秒级)
$current_time = current_time('timestamp');
// 定义6个月的时间戳(6个月 = 180天)
$six_months_ago = strtotime('-6 months', $current_time);
// 遍历评论
foreach ($comments as $comment) {
$email = $comment->comment_author_email;
$comment_date = strtotime($comment->comment_date); // 获取评论的时间戳
// 如果评论日期在6个月前,则跳过
if ($comment_date < $six_months_ago) {
continue;
}
// 如果没有记录该评论者的信息,则添加到数组中
if (!isset($unique_comments[$email])) {
$unique_comments[$email] = array(
'count' => 0,
'url' => $comment->comment_author_url,
'comment' => $comment,
'latest_comment_date' => $comment_date // 记录最新留言的时间
);
}
// 更新该评论者的最新留言时间
if ($comment_date > $unique_comments[$email]['latest_comment_date']) {
$unique_comments[$email]['latest_comment_date'] = $comment_date;
}
// 增加该邮箱的留言次数
$unique_comments[$email]['count']++;
}
// 显示每个评论者的名称和留言次数
foreach ($unique_comments as $email => $data) {
$count = $data['count'];
$comment = $data['comment'];
$comment_author_url = $data['url'];
$comment_author_name = esc_html($comment->comment_author); // 获取评论者名称并进行转义
$latest_comment_date = $data['latest_comment_date'];
// 判断该评论者是否超过6个月没有新留言
if ($latest_comment_date < $six_months_ago) {
// 如果该评论者的最新留言时间超过6个月,则不显示名字和链接
continue;
}
// 生成评论者名称和链接的代码
echo '<div style="position: relative; display: inline-block; margin-right: 20px; padding: 0;">';
if (!empty($comment_author_url)) {
echo '<a rel="nofollow" target="_blank" href="' . home_url() . "/goto?url=" . base64_encode($comment_author_url) . '">';
}
// 显示评论者的名称
echo '<span style="font-size: 1em; padding: 0 3px;">' . $comment_author_name . '</span>';
if (!empty($comment_author_url)) {
echo '</a>';
}
// 根据留言次数设置背景颜色和字体颜色
if ($count >= 50) {
// 背景为红色,字体为白色
echo '<span style="font-size: 0.7em; color: #fff; background: #f7828a; border-radius: 2px;">'
. esc_html($count) . '</span>';
} elseif ($count > 30) {
// 背景为绿色,字体为白色
echo '<span style="font-size: 0.7em; color: #fff; background: #90b47f; border-radius: 2px;">'
. esc_html($count) . '</span>';
} else {
// 默认样式
echo '<span style="font-size: 0.7em; color: #29d;">'
. esc_html($count) . '</span>';
}
echo '</div>';
}
?>
代码分析:
- 计算6个月前的时间戳:
- 使用
strtotime('-6 months', $current_time)
获取当前时间戳的6个月前的时间戳,用于后续判断。
- 使用
- 遍历评论并过滤:
- 在遍历所有评论时,通过
strtotime($comment->comment_date)
获取每条评论的时间戳,并与$six_months_ago
进行比较。 - 如果评论的时间戳早于6个月前,则跳过该评论(即不显示该评论者的名字和链接)。
- 在遍历所有评论时,通过
- 记录每个评论者的最新留言时间:
- 对于每个评论者,保留其最新的评论时间,并与后续的评论进行比较,确保只显示最近6个月内有留言的评论者。
- 判断评论者是否符合条件:
- 在显示评论者信息之前,检查评论者的最新留言时间,如果该时间早于6个月前,则跳过显示。
- 生成评论者的显示内容:
- 如果评论者符合条件,会显示评论者的名字、链接以及留言次数。留言次数的不同背景颜色根据条件设置:
- 50条及以上:红色背景
- 30条至50条:绿色背景
- 小于30条:默认字体蓝色
- 如果评论者符合条件,会显示评论者的名字、链接以及留言次数。留言次数的不同背景颜色根据条件设置:
2024进入11月
已入11月,时间总是一晃而过,这几天暖阳,很舒服,出行是外套+T恤,短袖收起来,牛仔裤也换了稍厚的,看了日历,1月底过年,还有3个月不到,这一年一年的过的好快,近期虽说有点忙,但还是有点忙里偷闲,自我放松,昨日上午去老同学家喝茶聊天,他工作自由,基本在家,所以我以后多了一个喝茶聊天的去处,下午回公司处理事情。由于每天要送儿子去学校,7点到校,所以到公司基本是7点半左右,今天有点困,到公司停好车后,把座椅躺下,眯睡了一会,结果睡着了,醒来已是8点40,赶紧起来回办公室,泡杯红茶,开始工作。
上周把车子的4条轮胎换了,3年7万4千公里,花纹磨浅,想着年底出差要跑高速,还是换了吧。原厂米其林换成马牌。新轮胎果然好使,开起来感觉稍有轻巧,制动距离也稍有变短,能感受出来。胎噪未感觉有变化。
尧哥七年级期中考试全班第五,数学全班第一。离他自己的目标还有差距,还需努力。
Hugo添加搜索
感谢:ZISHU ,分享了“用原生 js 给网站写个搜索功能”这篇文章。
大体步骤差不多,但是按照上面链接操作,打开搜索页面为空。以下为修改后的顺序。
具体操作步骤:
1,在主题\layouts文件夹,新建index.json文件,此时本地预览http://localhost:1313/index.json查看,如有显示标题,地址这些就表示这一步成功。
{{- $.Scratch.Set "posts" slice -}}
{{- range where .Site.RegularPages "Type" "post" -}}
{{- $.Scratch.Add "posts" (dict "title" .Title "permalink" .Permalink "summary" .Summary "content" .Content) -}}
{{- end -}}
{{- $.Scratch.Get "posts" | jsonify -}}
2,在\layouts\page文件夹,新建search.html文件,每个主题文件有差异,可参考同主题的single.html
{{ partial "header.html" . }}
<main>
<div class="header">
</div>
<article class="post-content markdown-body">
{{ .Site.Params.postHeaderContent | safeHTML }}
{{ .Content }}
<form id="searchForm">
<input autocomplete="off" type="text" id="searchInput" placeholder="输入搜索内容..." required>
<button type="submit">Saerch</button>
</form>
<ul id="resultsList" style="list-style-type: none;padding: 20px 0;word-wrap: break-word;color: #6b7280;"></ul>
</article>
<script>
let data = [];
// 从 /index.json 加载数据
fetch('/index.json')
.then(response => response.json())
.then(json => {
data = json; // 保存数据
})
.catch(error => console.error('Error loading data:', error));
document.getElementById('searchForm').addEventListener('submit', function (event) {
event.preventDefault();
const query = document.getElementById('searchInput').value.toLowerCase();
const resultsList = document.getElementById('resultsList');
resultsList.innerHTML = ''; // 清空之前的结果
if (query) {
const results = data.filter(item =>
item.title.toLowerCase().includes(query) ||
item.summary.toLowerCase().includes(query) ||
item.content.toLowerCase().includes(query) // 添加全文内容的搜索
);
if (results.length > 0) {
results.forEach(item => {
const listItem = document.createElement('li');
const truncatedContent = getTruncatedContent(item.content, query);
listItem.innerHTML = `
<a href="${item.permalink}" target="_blank">${highlightKeywords('<h999 style="color: #f7828a;margin-right: 10px;">➤</h999> ' + item.title, query)}</a>
<p>${highlightKeywords(truncatedContent, query)}</p>
`;
resultsList.appendChild(listItem);
});
} else {
resultsList.innerHTML = '<li>没有找到相关内容。</li>';
}
}
});
function highlightKeywords(text, query) {
const regex = new RegExp(`(${query})`, 'gi');
return text.replace(regex, '<span class="keyword-highlight">$1</span>');
}
function getTruncatedContent(content, query) {
const index = content.toLowerCase().indexOf(query);
if (index === -1) return highlightKeywords(content, query); // 如果没有找到关键词,返回高亮的内容
const start = Math.max(0, index - 50); // 前50个字符
const end = Math.min(content.length, index + query.length + 50); // 后50个字符
const truncated = content.substring(start, end);
// 添加省略号
if (start > 0) {
return '...' + highlightKeywords(truncated, query); // 在开头添加省略号
} else if (end < content.length) {
return highlightKeywords(truncated, query) + '...'; // 在结尾添加省略号
}
return highlightKeywords(truncated, query); // 返回高亮的截断内容
}
</script>
</main>
3,在\content,新建search.md
---
slug: search
title: search
layout: search
---
4,在config.toml设置
[[params.socials]]
name = "搜索"
link = "/search/"
[outputs]
home = ["HTML", "JSON"]
5,最后一步,添加相应的css
#searchForm {
margin-top: 20px;
display: flex;
align-items: center;
max-width: 800px;
width: 100%;
}
#searchForm input {
flex: 1;
height: 50px;
padding: 0 15px;
outline: none;
border: 2px solid #ccc;
border-radius: 3px;
}
#searchForm input:focus {
border-color: #666;
}
#searchForm button {
height: 50px;
padding: 0 15px;
cursor: pointer;
background: #c4c3c3;
outline: none;
border: 2px solid #ccc;
margin-left: 10px;
border-radius: 3px;
width: 20%;
}
#resultsList {
padding-left: 18px;
}
#resultsList .keyword-highlight {
background: #f6f694;
padding: 0 2px;
border-radius: 3px;
}
#resultsList > li {
margin-bottom: 20px;
padding-bottom: 20px;
border-bottom: 2px solid #ccc;
}
#resultsList > li > a {
color: #6b7280;
}
#resultsList * {
padding: 0;
margin: 0;
font-size: inherit;
color: inherit;
}
至此hugo即可。
把主题首页改成两栏显示
今天周末,在家休息,外面阴雨绵绵,上午8:30送儿子去课外培训班,就在家附近,走过去5分钟,上课到11:30接,然后回家跟老婆两人看了一部电影,烧了一壶热水,喝茶,中午饭后睡了一小会,被骚扰电话吵醒,我生气的在电话里骂人。。真的很烦,最近银行贷款的营销电话好多,一天能接好几个,周末都要打来!!睡不着了。。起床折腾主题代码,想把首页文章显示为两栏(Wordpress首页改成两栏显示),没有着急敲键盘,思考了一会,突然灵感来了,马上整起来,嗯,好像效果还行,心情瞬间大好。
第一步:在index.php的 <?php if(have_posts()):?> 下一行添加<div class=”posts-container” style=”display: flex;flex-wrap: wrap;gap: 5px 40px;”> ,在 <ol class=”page-navigator”>上一行添加</div>。意思就是,给它定义一个框,并且给它style css。
第二步:在css末尾添加以下代码,在宽屏和窄屏上都能正确显示。
.post{width: calc(50% - 20px);box-sizing: border-box;} /* Switch to single-column layout on mobile */ @media (max-width: 800px) {.post {width: 100%;}}
第三步:把single,page和search的class=”post”添加style=”width: 100%;”
20241025
最近一直在小范围修改hugo主题,目前已经成为我满意的样子,以后应该不再大改主题,昨天下午帽子叔打电话来要求GONG AN BEI AN,加了微信,我也是第一时间做处理并发消息告知,到昨天傍晚收到短信已通过,这速度绝对赞。
Wordpress的站点,基本每天有人来攻击,就这么好玩嘛,目前也没什么应对方案,暂时还能顶住,就是查看对方ip怎么经常变更,反正发现一次加一次黑名单。安全方面,hugo确实可能要好很多,不排除以后再次全部使用hugo的可能,至少现在已经做好完全准备。上一次由hugo转回wp是因为主题even由于长期未更新导致不兼容最新的hugo版本,经过这一年多的摸索,我认为只有让主题精简(删除一些不必要的东西,主题文件清晰),简单一些才适配新的版本,也做了一些主题的测试,证明我的想法目前来看没有问题,当然,升级版本前先备份一下旧版本,万一出什么问题还能换回去。
目前两种程序都在使用着,两者都喜欢。
Hugo一些设置
做了一些安全设置:
阻止hugo站点被rss订阅 ✔
阻止hugo站点被搜索引擎收录 ✔
阻止hugo站点被其它网站iframe嵌入 ✔
设置hugo站点防盗链 ✔
手动设置站内第三方链接不显示网址并用base64跳转 ✔
<a rel="nofollow" target="_blank" href="#" onclick="window.location.href=atob('aHR0cHM6Ly90aGlyZC1wYXJ05rLmNvbS8='); return false;">链接文本</a>
假设您的链接是 https://third-party-link.coom,转换结果为 aHR0cHM6Ly90aGlyZC1wYXJ05rLmNvbS8=
极简没什么不好,用来自己简单的记录挺好。
这运气
这运气是没谁了,加油卡积分换的康师傅方便面,想吃,拆一盒吧,有2把叉子,加量不加价嘛?
这运气吧,挺奇怪。
有次出差,中午吃面,鸡腿面,付了一个鸡腿的钱,服务员端来面,上面摆着一个鸡腿,吃了一半,发现碗底还有一个。。这可如何是好?
有次在kfc买了一个鸡肉汉堡套餐,服务员拿给我,当时比较饿,没注意,打开直接就吃起来,吃了两口发现不对呀,不是鸡肉,是牛肉汉堡,服务员也是不好意思什么什么的。。有点忘了,好像当时还补给我一个鸡肉汉堡的。
有次下班后,在路边捡到一个钻戒,钻石挺小个,刮一下挺硬,至今还在我办公抽屉里,有人出价1000,我没卖,我不知道真假,真的倒也算了,如果是假的,那我就坑人了,我不愿意做那事,所以一直放着。
。。。