标签 typecho 下的文章

前言

用AI辅助写的插件,至于有没有什么BUG咱也不知道

鉴于之前用的这个插件只能上传图片,对于其他类型的文件支持不是很理想,
[article id="1623"]
所以想借着AI尝试一下是否可以写一个支持S3兼容的插件

于是有了该插件

预览

后台设置

QQ20240729-115456.png

使用须知

需关闭php的display_errors

仅测试缤纷云,R2
php版本8.3
其他请自测

下载地址: 本地下载
S3下载:S3Upload.zip
项目地址 https://git.ima.cm/jkjoy/S3upload


前言

从Hugo主题Stack移植而来.

https://github.com/CaiJimmy/hugo-theme-stack

演示

https://wanne.cn

使用

站点 LOGO 地址

为左侧边栏头像

站点 Favicon 地址

Favicon

归档页面地址

创建归档页面后,在此填入

链接页面地址

使用links插件

创建链接页面后,在此填入

关于页面地址

创建关于页面后,在此填入

自定义菜单

        <li >
            <a href='/' >
                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-home" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><polyline points="5 12 3 12 12 3 21 12 19 12" /><path d="M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7" /><path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6" /></svg>
                <span>首页</span>
            </a>
        </li>

按照此格式填入

是否在侧边栏显示按日期归档

由于日期归档过多,可以选择是否显示

是否使用魔改风格

mod风格来自其他Stack用户

分类图片目录

按照分类的 mid 以jpg的格式 存放的目录
譬如本地目录 或者 CDN 等,用于匹配归档页面的分类图片

使用第三方评论

可以选择使用第三方的评论系统 如 twikoo 等

Header代码

用于DIY CSS 或 身份验证 等

Footer代码

用于插入备案号码 或者 统计代码等

项目地址

https://github.com/jkjoy/Typecho-Theme-Stack


简介

前文有
[article id="1586"]

个人看IM的时间比邮件的时间长,所以就还是使用QQ接收通知
基于 GO-CQhttp 项目
也可以使用插件实现
[article id="346"]

使用

修改主题 functions.phpfunction themeConfig($form) {下添加

    $qqboturl = new Typecho_Widget_Helper_Form_Element_Text('qqboturl', NULL, 'https://bot.asbid.cn', _t('QQ机器人API,保持默认则需添加 2280858259 为好友'), _t('基于cqhttp,有评论时QQ通知'));
    $form->addInput($qqboturl);
    $qqnum = new Typecho_Widget_Helper_Form_Element_Text('qqnum', NULL, '80116747', _t('QQ号码'), _t('用于接收QQ通知的号码'));
    $form->addInput($qqnum);

最后添加以下代码

function notifyQQBot($comment) {
    $options = Helper::options();
    // 检查评论是否已经审核通过
    if ($comment->status != "approved") {
        error_log('Comment is not approved.');
        return;
    } 
    // 获取配置中的QQ机器人API地址
    $cq_url = $options->qqboturl;
    // 检查API地址是否为空
    if (empty($cq_url)) {
        error_log('QQ Bot URL is empty. Using default URL.');
        $cq_url = 'https://bot.asbid.cn';
    }
    // 获取QQ号码
    $qqnum = $options->qqnum;
    // 检查QQ号码是否为空
    if (empty($qqnum)) {
        error_log('QQ number is empty.');
        return;
    }
    // 如果是管理员自己发的评论则不发送通知
    if ($comment->authorId === $comment->ownerId) {
        error_log('This comment is by the post owner.');
        return;
    }
    // 构建消息内容
    $msg = '「' . $comment->author . '」在文章《' . $comment->title . '》中发表了评论!';
    $msg .= "\n评论内容:\n{$comment->text}\n永久链接地址:{$comment->permalink}";
    // 准备发送消息的数据
    $_message_data_ = [
        'user_id' => (int) trim($qqnum),
        'message' => str_replace(["\r\n", "\r", "\n"], "\r\n", htmlspecialchars_decode(strip_tags($msg)))
    ];
    // 输出调试信息
    error_log('Sending message to QQ Bot: ' . print_r($_message_data_, true));
    // 初始化Curl请求
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => "{$cq_url}/send_msg?" . http_build_query($_message_data_, '', '&'),
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => false,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => 0
    ]);
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        error_log('Curl error: ' . curl_error($ch));
    } else {
        error_log('Response: ' . $response);
    }
    curl_close($ch);
}
Typecho_Plugin::factory('Widget_Feedback')->finishComment = 'notifyQQBot';

完成之后在主题设置处设置QQ机器人的API 和 QQ号码



说明

这是我移植的第一款主题

来自hugo-theme-farallon

原项目地址

感谢bigfa大大制作的主题
https://github.com/bigfa/hugo-theme-farallon

预览

预览

更新

2024.12.25

使用API查询来获取IP归属地
根据等级设置名字颜色,鼠标悬停在昵称时显示等级,在头像显示评论数

2024.12.12

给评论区加上身份等级
显示留言者的IP信息

删除归档中的字数统计

把豆瓣的设置移到了自定义页面,使用自定义字段设置

使用指南

观影页面说明

by 豆瓣

参照Docker 自动同步豆瓣书影音记录部署

使用自定义字段设置douban 默认为https://db.imsun.org
https://www.imsun.org/movies

by Neodb 0.6.3新增

参照[article id="1688"]
获得获取neodb API
使用自定义字段设置neodb 默认为https://neodb.imsun.org
https://www.imsun.org/neodb

友情链接说明

https://www.imsun.org/links
基于 links 插件实现

可使用 寒泥 大佬制作的版本或者其他版本

说说页面说明

by memos

Memos请自行部署
https://www.imsun.org/memos/
利用memos实现动态获取说说,仅支持memos v0.20.0以下版本
使用自定义字段设置memos
在自定义字段中填入memos值为memos地址,不带/
在自定义字段中填入memosID默认值为1, 当您的ID 不为1时 需要设置
在自定义字段中填入memosnum默认值为20,默认获取20条最近的memo

by mastodon

https://www.imsun.org/talks/
支持mastodon gts pleroma
根据
[article id="1664"]
或者
[article id="1643"]
获得API地址
在自定义字段中填入tooot值为Mastodon API 地址 例如 https://www.imsun.org/toot.json

标签页面

https://www.imsun.org/tags/

分类页面

分类图片按照mid.jpg的格式存放在对应的目录中
然后填入相对的url
https://www.imsun.org/category/

归档页面

https://www.imsun.org/archives/

统计页面 0.6.2 移除

https://www.imsun.org/site/

首页摘要

若使用AI摘要插件则显示AI摘要,不使用则显示默认字数摘要

好物页面

基于memos
https://www.imsun.org/goods
在自定义字段中填入memos值为memos地址
在自定义字段中填入memosID默认值为1,不为1时才需要设置
在自定义字段中填入memostag默认值为好物,不为好物时才需要设置

QQ评论通知

QQ机器人API,保持默认 则需添加 2280858259 为好友

这里附上我搭建的所有QQ机器人的列表以及状态
https://www.imsun.org/qqbot

当你的博客有人评论时QQ机器人会发消息到你的QQ

自行搭建QQ机器人,可查阅
[article id="1668"]

下载地址

https://github.com/jkjoy/typecho-theme-farallon/releases
国内用户访问
https://git.jiong.us/jkjoy/typecho-theme-farallon/releases/


typecho 貌似没有免费的S3对象储存的插件,但是找到了一个兰空图床的插件

使用

搭建LskyPro

这里选择使用1panel创建Docker容器
或者使用拉取编译好的镜像

docker run -d \
    --name lsky-pro \
    --restart unless-stopped \
    -p 8089:8089 \
    -v $PWD/lsky:/var/www/html \
    -e WEB_PORT=8089 \
    halcyonazure/lsky-pro-docker:latest

安装过程略过不提.

设置好反代域名
此处以api.imsun.org为例

创建储存

创建储存策略,以UCloud的对象储存US3为例
储存策略 = AWS S3
访问域名 = CDN加速域名
AccessKeyIdSecretAccessKey控制台 获取到的公钥 和 私钥.
连接地址https://s3-cn-gd.ufileos.com
区域(region) = us-east-1
储存桶名称 为自己创建的名称

获取token

使用API在线工具
Getman
根据API文档,使用POST
URL为 https://api.imsun.org/api/v1/tokens

把以下信息填入body

email: 账号
password: 密码

获得 token

"token": "2|7pcz6d1q7HCadfYpVX5f2HrYOCxaocvbeskP6at"

启用插件

插件下载地址

LskyProV2.zip

Api填写兰空图床的地址
Token填写上一步获取到的token

Bearer 2|7pcz6d1q7HCadfYpVX5f2HrYOCxaocvbeskP6at

储存ID填写兰空图床储存策略前的ID即可

总结

通过兰空图床也可以实现诸如通过webdav和alist实现存储在阿里云盘或者天翼云盘等操作.这里就不一一演示了.

引用

  1. https://www.coldyun.cn/archives/140.html
  2. https://github.com/HalcyonAzure/lsky-pro-docker

前言

起因是wordpress会自动安装一个名为wpcode的插件,每次删除卸载之后仍会自动安装,有一次直接导致网站无法访问,百度不得其解.重装也不起效.
于是弃之.
转投typecho的怀抱.

环境

PHP 8.2
Mysql 5.5

转换

先安装Typecho .
1.下载插件 WordpressToTypecho,配置好数据库的相关设置,
参考 https://docs.typecho.org/import
2.点击转换成功之后,把附件资料从WordPresswp-content/uploads目录下全部移动到Typechousr/uploads目录下,保持目录结构不变。
3.在数据库中执行

update typecho_contents set text=replace(text,'wp-content/uploads','usr/uploads')

4.设置伪静态,保持与wordpress相同的链接结构

使用

插件

1.AAEditor Markdown编辑器功能强大
2.AISummary 使用ChatGPT或者Gemini生成文章摘要.开箱即用.
看到木木老师有分享这个网站,可以使用我的aff注册,谢谢
https://burn.hair/register?aff=a8fr

新用户赠送 2500000 token,约等于 5 USD
邀请用户注册,双方各得 1000000 token,约等于 2 USD

3.Links 友情链接插件
4.ShortLinks 把外链转换成内链
php8.2报错需修改Plugin.php

//$str = str_replace(array("\r\n", "\r", "\n"), "|", $textarea);

// 检查 $textarea 是否为 null,如果是,设为一个空字符串
$textarea = $textarea ?? '';
// 然后你可以对其使用 str_replace
$str = str_replace(array("\r\n", "\r", "\n"), "|", $textarea);

5.SiteMap 网站地图
6.WordsCounter 字数统计
7.cosUploadV5 腾讯COS对象储存

主题

主题使用开源的 Matcha
1.修改
想让首页显示的摘要为AI生成的摘要
matcha/includes/posts.php中的

<div class="post-content" itemprop="articleBody">
<?php Matcha::excerpt($this); ?>
</div>

替换为

<div class="post-content" itemprop="articleBody">
    <?php
    // 判断是否存在自定义字段summary并输出,否则输出自动生成的摘要
    if($this->fields->summary){
        echo $this->fields->summary;
    } else {
        Matcha::excerpt($this);
    }
    ?>
</div>

主题使用Sunny Lite!时,修改article.php

  <?php echo get_Abstract($this,300); ?>

替换为

<?php echo $this->fields->summary;?>

2.显示页面加载时间
在主题的 Functions.php 中加入以下代码

/**
* 页面加载时间
*/
function timer_start() {
global $timestart;
$mtime = explode( ' ', microtime() );
$timestart = $mtime[1] + $mtime[0];
return true;
}
timer_start();
function timer_stop( $display = 0, $precision = 3 ) {
global $timestart, $timeend;
$mtime = explode( ' ', microtime() );
$timeend = $mtime[1] + $mtime[0];
$timetotal = number_format( $timeend - $timestart, $precision );
$r = $timetotal < 1 ? $timetotal * 1000 . " ms" : $timetotal . " s";
if ( $display ) {
echo $r;
}
return $r;
}

footer.php 合适位置插入

<?php echo timer_stop();?>

或者

<a href="javascript:(0)" id="pagetimes"></a>
<script>
document.getElementById('pagetimes').innerHTML = '<img src="https://img.shields.io/badge/页面加载耗时:-<?php echo timer_stop();?>-green">';
</script>

3.使用memos API增加说说页面
把 page-memos.php放在模板matcha

然后在后台新建独立页面-选择模板
添加字段中自定义
memos= memos地址 默认为https://memos.imsun.org
memostag = 使用的tag 可以选择默认,默认为说说
creatorId = memos的ID,默认为1
memosname = 显示的昵称
memosava = 显示的头像

下载地址

4.关闭非中文语系的评论
查找comments.php文件中

<?php if($this->allow('comment')): ?>

替换为

<?php if($this->allow('comment') && stripos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'zh') > -1): ?>

5.打赏
根据插件Donate提取

<!--打赏  -->
<script type="text/javascript" src="https://blogcdn.loliko.cn/donate/index_wx.js?121"></script>
<link rel="stylesheet" type="text/css" href="https://blogcdn.loliko.cn/donate/style_wx.css?121" />
<div class="donate-panel"> 
  <div id="donate-btn">赏</div> 
  <div id="qrcode-panel" style="display: none;"> 
    <div class="qrcode-body"> 
      <div class="donate-memo"> 
      <span id="donate-close">关闭</span> 
    </div> 
    <div class="donate-qrpay"> 
     <img id="wxqr" src="https://blogcdn.loliko.cn/donate/2in12.png" /> 
    </div> 
     </div> 
   </div> 
</div> 

参考
1.https://docs.typecho.org/import