AI摘要:

文章介绍了通过内网部署和使用frp映射的方式,在本地机器上保存Typecho博客数据,以确保数据安全,同时在服务器上搭建备用站点以供断网时使用。具体步骤包括下载typecho,上传到网站目录并进行安装,使用initial主题,并进行一系列的个性化设置和插件安装。魔改部分涉及主题文件、footer.php等的修改,包括修改header.php中的MathJax配置、汉化包的安装、首页摘要限制字符数的更改等。此外,文章还介绍了一系列实用插件和主题魔改,包括文章部分加密、回复可见、置顶、字体更换、IP显示评论ip等功能的插件。整体而言,文章内容详实,适合Typecho博客用户进行站点搭建和个性化设置。

基本配置

  • 由于WordPress比较庞杂,功能太多对纯写作有些浪费,转而通过内网部署+frp映射的方式,将数据保存在本地机器上利于数据安全,同时在服务器中搭建备用站点供断网时使用。
  1. 官网下载typecho,上传到网站目录,访问 网址/install.php 安装,
  2. 本站使用initial主题,下载initial主题上传到usr/theme/ 文件夹中,在后台启用即可

    • (更新后忽略,但留作备忘)http资源自动升级为https解决浏览器禁用问题:在主题header.php加入<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    • (更新后忽略,但留作备忘)发现header.php中有mathjax但是过期被禁用,将
    <script type="text/x-mathjax-config">
       MathJax.Hub.Config({
       extensions: ["tex2jax.js"],
       jax: ["input/TeX", "output/HTML-CSS"],
       tex2jax: {
         inlineMath: [ ['$','$'], ["\\(","\\)"] ],
         displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
         processEscapes: true
       },
       "HTML-CSS": { availableFonts: ["TeX"] }
       });
    </script>
    
    <script type="text/javascript"
     src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?   config=TeX-AMS-MML_HTMLorMML">
    </script>

    改为

    <script>
     MathJax = {
         tex:{
             inlineMath: [["$", "$"]],
             displayMath: [["$$", "$$"]],
         },
         svg: {
             fontCache: "global",
             scale: 0.8,
         }
     };
    </script>
    <script type="text/javascript" id="MathJax-script" async
         src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
    </script>
  3. 根据主题说明进行个性化设置
  4. 在config文件中开启ssl

    /** 开启HTTPS */
    define('__TYPECHO_SECURE__',true);
  5. (可选)宝塔反代的缓存方式对typecho后台可能有干扰,出现登陆但首页没有相关信息的状况,可选修改反代配置,注意修改配置中的反代地址

    #PROXY-START/
    location /
    {
     #缓存媒体文件
     location ~* .jpg|.png|.gif|.jpeg|.ttf|.webp|.woff|.woff2|.ico$
     {
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header REMOTE-HOST $remote_addr;
         proxy_pass http://127.0.0.1:7207;
         proxy_cache cache_one;
         proxy_cache_valid 30d;
         proxy_ignore_headers Cache-Control;
         add_header X-Cache "$upstream_cache_status from $server_addr";
     }
     
     #缓存css、js
      location ~* .css|.js$
     {
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header REMOTE-HOST $remote_addr;
         proxy_pass http://127.0.0.1:7207;
         proxy_cache cache_one;
         proxy_cache_valid 3d;
         proxy_ignore_headers Cache-Control;
         add_header X-Cache "$upstream_cache_status from $server_addr";
     }
     
     proxy_pass http://127.0.0.1:7207;
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header REMOTE-HOST $remote_addr;
     
     #持久化连接相关配置
     #proxy_connect_timeout 30s;
     #proxy_read_timeout 86400s;
     #proxy_send_timeout 30s;
     #proxy_http_version 1.1;
     #proxy_set_header Upgrade $http_upgrade;
     #proxy_set_header Connection "upgrade";
     #add_header X-Cache $upstream_cache_status;
     
     #expires 12h;
    }
     #PROXY-END/
  6. 【魔改】修改主题header.php文件中<a id="logo" href="<?php $this->options->siteUrl(); ?>" rel="home">标签href内容,实现点击图片跳转到主页(非博客首页)。例如:<a id="logo" href="https://www.zelyo.cn/" rel="home">
  7. 实现Typecho数学公式输入。使用了此插件,参考此文章,MathJax.php源码及说明记录如下(修改scale:0.8可改变缩放比例):

    <?php
    /**
     * MathJax
     *
     * @package MathJax
     * @author zhibi
     * @version 1.0.1
     * @link https://www.drawrain.com
     */
    class MathJax implements Typecho_Plugin_Interface
    {
     /**
      * 激活插件方法,如果激活失败,直接抛出异常
      *
      * @access public
      * @return void
      * @throws Typecho_Plugin_Exception
      */
     public static function activate()
     {
         Typecho_Plugin::factory('Widget_Archive')->footer = array('MathJax', 'footer');
     }
    
     /**
      * 禁用插件方法,如果禁用失败,直接抛出异常
      *
      * @static
      * @access public
      * @return void
      * @throws Typecho_Plugin_Exception
      */
     public static function deactivate()
     {}
    
     /**
      * 获取插件配置面板
      *
      * @access public
      * @param Typecho_Widget_Helper_Form $form 配置面板
      * @return void
      */
     public static function config(Typecho_Widget_Helper_Form $form){}
    
     /**
      * 个人用户的配置面板
      *
      * @access public
      * @param Typecho_Widget_Helper_Form $form
      * @return void
      */
     public static function personalConfig(Typecho_Widget_Helper_Form $form){}
    
     /**
      * 输出尾部js
      *
      * @access public
      * @param unknown $footer
      * @return unknown
      */
     public static function footer() {
     echo '<script>
     MathJax = {
         tex:{
             inlineMath: [["$", "$"]],
             displayMath: [["$$", "$$"]],
         },
         svg: {
             fontCache: "global",
             scale: 0.8,
         }
     };
     </script>
     <script type="text/javascript" id="MathJax-script" async
         src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
     </script>';
     }
    }

    修改标识符仅支持$、$$,去除了对()、[]的识别,避免对文章其他内容造成影响
    行内公式将latex公式包含在$$之间。e.g.

    欧拉公式为:$e^{i \theta} =cos{\theta}+i \cdot sin{\theta}$

    $e^{i \theta} =cos{\theta}+i \cdot sin{\theta}$
    段落公式将latex公式包含在$$$$之间。e.g.

    欧拉公式为:
    $$e^{i \theta} =cos{\theta}+i \cdot sin{\theta}$$

    欧拉公式为:
    $$e^{i \theta} =cos{\theta}+i \cdot sin{\theta}$$
    需要单独显示含$内容时需要用行内代码或段落代码表示
    MathJax中文文档
    Latex公式手册
    Latex公式手册新

  8. 【魔改】修改footer.php文件,在ICP备案号之前添加图标:
    <p><img src="icp.svg" alt="icp" height="10px"><a href="http://beian.miit.gov.cn" class="icpnum" target="_blank" rel="noreferrer"><?php $this->options->ICPbeian(); ?></a></p>
  9. 【魔改】编辑器增加ctrl+s自动保存功能,修改/admin/write-post.php文件,在最后一个`</div>后添加如下代码(来自该文章):
<script>
    document.addEventListener("keydown", function(e) {
        var locked = false,
        formAction = $("form").attr('action'),
        idInput = $('input[name=cid]'),
        cid = idInput.val(),
        autoSaveOnce = !!cid,
        lastSaveTime = null;

        function save(){
            // $("#save-message").remove();
            // var autoSave = $('<span id="auto-save-message" class="left"></span>').prependTo('.submit');
            var autoSave = $("#auto-save-message");
            savedData = $("form").serialize();

            idInput.val(cid);
            var data = $("form").serialize();

            if (!locked) {
                locked = true;
                autoSave.text('<?php _e('正在保存'); ?>');
                $.post(formAction, data + '&do=save', function (o) {
                    savedData = data;
                    lastSaveTime = o.time;
                    cid = o.cid;
                    autoSave.text('<?php _e('已保存'); ?>' + ' (' + o.time + ')').effect('highlight', 1000);
                    locked = false;
                }, 'json');
            }
        }

        //可以判断是不是mac,如果是mac,ctrl变为command
        //event.preventDefault() 方法阻止元素发生默认的行为。
        if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
            e.preventDefault();
            // $("#btn-save").click();

            //changeView("source");
            save();
            //changeView("visual");
        }
    })
</script>

实用插件及主题魔改

Typecho文章部分加密功能

使用插件PartiallyPassword,参考此文章
举例:

不需要密码的内容

不需要密码的内容

不需要密码的内容

不需要密码的内容

密码组填写内容:

{
    "0": "123456",   //第一块的密码
    "喵": "miao~",   //第二块的密码
    "2": "000000"   //第三块的密码
}

更多用法参考GitHub说明页面。

HideTool回复可见插件

下载地址:https://github.com/jclser/HideTool

此处内容需要评论回复后(审核通过)方可阅读。

【魔改】sticky文章置顶插件

下载地址:https://github.com/jazzi/sticky-for-typecho
cid查看方法是在“管理文章”页面,鼠标悬停于你的文章,浏览器底部状态栏即可显示

在 index.php 的 $this->title(); 前面加上 $this->sticky(); 可出现置顶标题的 html
例:

https://github.com/hakula139/UserAgent-for-Typecho
在需要显示的地方插入以下代码:<?php UserAgent_Plugin::render($comments->agent); ?>
建议添加在comments.php中的<b><?php CommentAuthor($comments); ?></b>下一行

RobotsPlusPlus蜘蛛来访记录插件

下载地址:https://xiamp.net/archives/typecho-spider-visit-record-plugin-enhanced-enhanced-version-robotsplusplus.html

BaiduTextCensor & SmartSpam反垃圾评论

下载地址:http://www.yovisun.com/archive/typecho-plugin-smartspam.html
下载地址:https://github.com/sy-records/ty-baidu-textcensor

AutoPhotos图片增强插件

下载地址:https://github.com/Rakiendesu/AutoPhotos

【魔改】添加文章最后更新时间

编辑post.php文件,在<li><?php Postviews($this); ?></li>下一行添加<li>最后更新:<?php echo date('Y-m-d H:i:s', $this->modified);?></li>

【魔改】更改首页摘要限制字符数

编辑index.php和archive.php,将<p><?php $this->excerpt(200, ''); ?></p>改为:<p><?php $this->excerpt(600, ''); ?></p>,然后手动再文章中插入<!--more-->来设置摘要截取终点。archive.php文件会影响选择分类后的页面内容。

iThunb文章缩略图插件(此插件与PartiallyPassword插件冲突,非必需暂时弃用)

下载地址:https://github.com/benzBrake/iThumb

AAEditor编辑器增强插件

下载地址:https://xiamp.net/archives/aaeditor-is-another-typecho-editor-plugin.html/comment-page-11

出现配置信息读取问题需要修改数据库typecho_options表中相关内容

新功能示例:

音频卡片和音频列表(该功能与initial主题目录功能冲突),已关闭。

m3u8/mp4视频引用及B站视频引用:


多彩按钮:
点此查看

折叠卡片:

折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试折叠卡片测试

codepen和GitHub:

引用站内文章:

【阡陌交通】苍南168黄金海岸线

多标签:


标签1内容

标签2内容

FontLibs更换字体插件

下载地址:https://github.com/xxhzm/FontLibs

【魔改】Lopwon IP显示评论ip插件

下载地址:https://cloud.tencent.com/developer/article/2301872
发布地址:http://www.lopwon.com/lopwon-ip.html
需要在和UserAgent插件类似地方插入<?php $comments->location(); //LopwonIP ?>
腾讯地图api说明:白名单留空可不限制,同时需要手动分配限额后才能使用。腾讯状态码说明腾讯地图api管理首页

【魔改】Pageviews &RunTime网站统计插件

显示网站访问次数和运行时间
下载地址:https://github.com/ponycool/typecho-plugins
论坛地址:https://forum.typecho.org/viewtopic.php?t=11519
需要在主题footer.php中ICP相关内容下一行添加<?php PageViews_Plugin::showPageViews(); ?><?php RunTime_Plugin::show(); ?>进行调用。
这两个插件需要php8.0以上,主要因为代码最后使用了match功能,将对应部分代码改为使用switch语句即可支持旧版php:

    public static function humanize(int $views): string
    {
        return match (true) {
            $views > 100000000 => sprintf('%s.0fB+', $views / 100000000),
            $views > 1000000 => sprintf('%s.0fM+', $views / 1000000),
            $views > 1000 => sprintf('%.0fK+', $views / 1000),
            default => sprintf('%s', $views),
        };
    }

改为:

    public static function humanize(int $views): string
    {
        switch (true) {
            case $views > 100000000:
                return sprintf('%.0fB+', $views / 100000000);
            case $views > 1000000:
                return sprintf('%.0fM+', $views / 1000000);
            case $views > 1000:
                return sprintf('%.0fK+', $views / 1000);
            default:
                return sprintf('%s', $views);
        }
    }
        match ($format) {
            1 => $runTime = 'day + "天"',
            2 => $runTime = 'day + "D " + hour + "H " + minute + "M " + second + "S"',
            default => $runTime = 'day + "天" + hour + "小时" + minute + "分" + second + "秒"'
        };

替换为:

switch ($format) {
    case 1:
        $runTime = 'day + "天"';
        break;
    case 2:
        $runTime = 'day + "D " + hour + "H " + minute + "M " + second + "S"';
        break;
    default:
        $runTime = 'day + "天" + hour + "小时" + minute + "分" + second + "秒"';
}

否则会出现syntax error, unexpected '=>' (T_DOUBLE_ARROW)等报错。

Mourn全站变灰插件

下载地址:https://github.com/ponycool/typecho-plugins
插件需要php8.0以上,修改以下代码使之支持低版本php:

    public static function mourn(): void
    {
        $options = Helper::options();
        try {
            $pluginConfig = $options->plugin(self::$pluginName);
        } catch (Exception) {
            return;
        }
        if ($pluginConfig->enabled === '1') {
            self::scriptRender();
        }
    }

替换为

    public static function mourn(): void
    {
        $options = Helper::options();
        try {
            $pluginConfig = $options->plugin(self::$pluginName);
        } catch (Exception $exc) {
            return;
        }
        if ($pluginConfig->enabled === '1') {
            self::scriptRender();
        }
    }

TagsList后台增加标签列表插件

下载地址:https://github.com/ponycool/typecho-plugins

Tp2MD导出文章markdown插件

下载地址:https://github.com/AlanDecode/Typecho-Plugin-Tp2MD

ShortLinks外链转内链插件

下载地址:https://github.com/benzBrake/ShortLinks

Sitemap插件

下载地址:https://github.com/bayunjiang/typecho-sitemap
相关问题说明:Typecho启用sitemap插件,附404和500报错解决方法
备忘:

  • 使用该插件需要添加如下的伪静态设置,否则会出现404错误等问题。

    if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; }
  • 修改sitemap.xsl文件可以自定义xml文件格式

AIContentSummary人工智能摘要

下载地址:https://github.com/Rockytkg/AIContentSummary

debug相关

开启调试模式

  • 再typecho根目录找到config.inc.php,在其末尾加入:

    /** 开启Debug模式 */
    define('__TYPECHO_DEBUG__', true);