Typecho搭建和美化

news2024/11/18 6:00:40

概述

Typecho是一款轻量级的开源PHP博客系统,它简单易用,界面整洁,性能高效,主题、插件众多。我使用的是腾讯云轻量服务器,Typecho的应用模版,一键安装环境。构建自己的博客网站,记录生活、分享经验。

购买域名、备案、申请SSL

这样在之后创建完typecho服务器,就会在nginx中直接添加对应域名的https的配置。
若没有域名也没问题,使用 ip+port 的形式访问。

购买云服务器

userlmn_6a26d3e033ca83ec9603915d34a9ec46

获取服务器相关账号密码

# 应用管理 -> 管理员密码 -> 复制 -> 登录 -> 粘贴 -> ⏎
# 获取以下账号和密码,保存好
# typecho_username = xxx
# typecho_password = xxx
# mariadb_password = xxx

# 若远程连接MariaDB,报错1130,说明在MariaDB上没有为 Navicat 运行的主机 IP 授予数据库访问权限
# 将navicat提示的报错ip替换下面"IP",将上述记录的数据库密码替换下面"Password"。进入服务器数据库,执行
mysql -uroot -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'IP' IDENTIFIED BY 'Password' WITH GRANT OPTION;
userlmn_511c9c8d24b0bb19bc92a119bc63fdd5

Typecho主题的使用以及美化

以下包括Jasmine主题的基本配置,个人优化。

使用主题

# 参考文档:https://gitee.com/LiaoChunping/Jasmine/wikis/Home
# 将主题下载,并放到下面目录中
cd /usr/local/lighthouse/softwares/typecho/usr/themes

# 解压
unzip jasmine.zip

# 登录后台管理页面 http://xxx.xx.xx.xxx/admin
# 控制台 -> 外观 ,就能看到新增的主题
# 点击 设置外观 Tab, 按下面步骤说明操作

设置网站地址栏图标

cd /usr/local/lighthouse/softwares/typecho
# 复制一个 favicon.ico 文件上去,浏览器清理缓存,再刷新查看

设置站点logo地址

# png格式,我这里是使用腾讯云的对象存储来保存图片

左侧菜单栏

首先需要创建对应独立页面,归档、随机菜单,创建时,需要选择“自定义模版”

 
[
  {
    "name": "关于",
    "icon": "bi bi-person-circle",
    "url": "/about.html",
    "newTab": false
  },
  {
    "name": "首页",
    "icon": "bi bi-house-door-fill",
    "url": "/",
    "newTab": false
  },
  {
    "name": "归档",
    "icon": "bi bi-archive-fill",
    "url": "/archive.html",
    "newTab": false
  },
 {
    "name": "下载",
    "icon": "bi bi-cloud-arrow-down-fill",
    "url": "/download.html",
    "newTab": false
  },
  {
    "name": "随机",
    "icon": "bi bi-cursor-fill",
    "url": "/random.html",
    "newTab": false
  }
]

中间头部分类

# 点击 管理 -> 分类,创建多个分类,依次点击查看地址栏中的"mid"值是多少
1 || 2 || 3 || 4

给左下角添加发送邮件的按钮

# /Jasmine/inc/components/left-sidebar.php,在最下方 ul 中添加一个li

<li class="nav-item mb-2">
  <span role="button" class="nav-link" id="mailToMe"
    data-bs-toggle="tooltip"
    data-bs-title="邮件Me我"
    data-bs-placement="right"
    title="邮件Me我">
    <i class="bi bi-envelope-fill"></i>
  </span>
</li>


# /Jasmine/assets/jasmine/jasmine.js,在下面添加这段代码

// mailToMe
$('#mailToMe').on('click', function () {
  window.location.href = 'mailto:975942219@qq.com'; // 发送邮件
})

最下方添加访问量统计

# 下载插件(https://github.com/51la/51la-Analysis-Typecho-Plugin),重命名为LaAnalysis,复制到下面路径中,开启插件
cd /usr/local/lighthouse/softwares/typecho/usr/plugins

# 登录网站 https://v6.51.la/ ,添加应用,复制统计ID中的掩码ID,粘贴到 typecho后台管理 -> 插件 -> 设置 -> MaskId
# 登录网站 https://v6.51.la/,查看应用,点击配置,选择 数据挂件Tab,编辑完挂件样式,复制下面代码

# 找到 footer.php 文件,最下方添加这段代码
cd /usr/local/lighthouse/softwares/typecho/usr/themes/jasmine

<p>
    <script id="LA-DATA-WIDGET" crossorigin="anonymous" charset="UTF-8" src="https://v6-widget.51.la/v6/K3UZ8NL244OguW9Q/quote.js?theme=#5E595A,#333333,#999999,#333333,#FFFFFF,#FD6591,12&f=12&display=0,0,1,1,0,0,1,1"></script>
</p>

最下方添加备案图标

# 找到 footer.php 文件,最下方添加这段代码


<p style="display: inline-flex; align-items: center;">
  <!--版权图标-->
  <svg t="1620356167087" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7694" width="20" height="20"><path d="M778.24 163.84c-76.8-40.96-165.888-61.44-269.312-61.44s-192.512 20.48-269.312 61.44h-133.12l23.552 337.92c8.192 113.664 67.584 217.088 162.816 280.576l215.04 144.384 215.04-144.384c96.256-63.488 155.648-166.912 163.84-280.576l23.552-337.92H778.24z m47.104 333.824c-7.168 94.208-56.32 181.248-135.168 233.472l-181.248 120.832L327.68 731.136c-78.848-53.248-129.024-139.264-135.168-233.472L173.056 225.28h136.192v-26.624c58.368-23.552 124.928-34.816 199.68-34.816s141.312 12.288 199.68 34.816V225.28H844.8l-19.456 272.384z" fill="#0649D0" p-id="7695"></path><path d="M685.056 328.704v-46.08H455.68c2.048-4.096 6.144-9.216 11.264-15.36 5.12-7.168 9.216-12.288 11.264-15.36L419.84 240.64c-31.744 46.08-75.776 87.04-133.12 123.904 4.096 4.096 10.24 11.264 18.432 21.504l17.408 17.408c23.552-15.36 45.056-31.744 63.488-50.176 26.624 25.6 49.152 43.008 67.584 51.2-46.08 15.36-104.448 27.648-175.104 35.84 2.048 5.12 6.144 13.312 9.216 24.576 4.096 11.264 6.144 19.456 7.168 24.576l39.936-7.168v218.112H389.12V680.96h238.592v19.456h54.272V481.28H348.16c60.416-12.288 114.688-27.648 163.84-46.08 49.152 19.456 118.784 34.816 210.944 46.08 5.12-17.408 10.24-34.816 17.408-51.2-62.464-4.096-116.736-12.288-161.792-24.576 38.912-20.48 74.752-46.08 106.496-76.8z m-150.528 194.56h94.208v41.984h-94.208v-41.984z m0 78.848h94.208v41.984h-94.208v-41.984z m-144.384-78.848h94.208v41.984H390.144v-41.984z m0 78.848h94.208v41.984H390.144v-41.984zM424.96 326.656h182.272c-26.624 22.528-57.344 41.984-94.208 57.344-31.744-15.36-61.44-34.816-88.064-57.344z" fill="#0649D0" p-id="7696"></path></svg>

  <a href="https://beian.miit.gov.cn/" target="_blank"><?php $this->options->icpCode(); ?></a>
</p>

添加文章浏览次数统计

# 参考文档 https://www.cnblogs.com/outsrkem/p/12182275.html

# 控制台 -> 编辑当前外观 -> 找到 functions.php 文件,添加代码

/**
 * 文章添加浏览次数统计
 */
function Postviews($archive) {
    $db = Typecho_Db::get();
    $cid = $archive->cid;
    if (!array_key_exists('views', $db->fetchRow($db->select()->from('typecho_contents')))) {
        $db->query('ALTER TABLE `'.$db->getPrefix().'typecho_contents` ADD `views` INT(10) DEFAULT 0;');
    }
    $exist = $db->fetchRow($db->select('views')->from('typecho_contents')->where('cid = ?', $cid))['views'];
    if ($archive->is('single')) {
        $cookie = Typecho_Cookie::get('contents_views');
        $cookie = $cookie ? explode(',', $cookie) : array();
        if (!in_array($cid, $cookie)) {
            $db->query($db->update('typecho_contents')
                ->rows(array('views' => (int)$exist+1))
                ->where('cid = ?', $cid));
            $exist = (int)$exist+1;
            array_push($cookie, $cid);
            $cookie = implode(',', $cookie);
            Typecho_Cookie::set('contents_views', $cookie);
        }
    }
    echo $exist == 0 ? ' 暂无阅读' :$exist.' 人浏览';
}


# 调用方式。我是用的 Jasmine 主题,所以文章浏览页面是 middle-single.php,添加代码(大约在35行左右)
# 这个页面是必加的,否则不能实现计数功能。其他页面还需调用则添加同样代码
# 查看所有文章概况时,也可添加上 (default-item.php)

<!-- 添加页面浏览次数统计 -->
<span class="middotDivider"></span>
<span><?php Postviews($this); ?></span>

添加友链功能

# 添加友链独立页面 link.html,粘贴如下代码

<table>
<div class="post-body">
   <div id="links">
      <div class="links-content">
         <div class="link-navigation">
            <div class="card">
               <img class="ava" src="https://cdn.jsdelivr.net/gh/hvnobug/assets/common/avatar.png" />
               <div class="card-header">
                  <div>
                     <a href="https://blog.hvnobug.com/">Emil’s blog</a>
                  </div>
                  <div class="info">这是一个分享IT技术的小站。</div>
               </div>
            </div>
            <div class="card">
               <img class="ava" src="https://blog-images-1301001018.cos.ap-beijing.myqcloud.com/favicon.png" />
               <div class="card-header">
                  <div>
                     <a href="https://yingwiki.top">越行勤's Blog</a>
                  </div>
                  <div class="info">努力学习的小菜鸟</div>
               </div>
            </div>
         </div>
      </div>
   </div>
</div>
</table>


# 主图外观中,左边菜单栏添加如下代码

{
    "name": "友链",
    "icon": "bi bi-people-fill",
    "url": "/link.html",
    "newTab": false
  }


# 主图外观中,自定义样式添加如下代码

.links-content {
    margin-top: 1rem
}

.link-navigation::after {
    content: " ";
    display: block;
    clear: both
}

.card {
    width: 45%;
    font-size: 1rem;
    padding: 10px 30px;
    border-radius: 4px;
    transition-duration: 0.15s;
    margin-bottom: 1rem;
    display: flex;
    border-style:none;
}

.card:nth-child(odd) {
    float: left
}

.card:nth-child(even) {
    /* float: right */
}

.card:hover {
    transform: scale(1.1);
    box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04)
}

.card a {
    border: none
}

.card .ava {
    width: 3rem !important;
    height: 3rem !important;
    margin: 0 !important;
    margin-right: 1em !important;
    border-radius: 4px
}

.card .card-header {
    font-style: italic;
    overflow: hidden;
    width: 100%
}

.card .card-header a {
    font-style: normal;
    color: #2bbc8a;
    font-weight: bold;
    text-decoration: none
}

.card .card-header a:hover {
    color: #d480aa;
    text-decoration: none
}

.card .card-header .info {
    font-style: normal;
    color: #a3a3a3;
    font-size: 14px;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap
}
# 以后每次添加友链复制一份,手动修改内容

# 名称 {name}
# 链接 {link}
# 头像 {avatarurl}
# 简介 {description}

<div class="card">
   <img class="ava" src="{avatarurl}" />
   <div class="card-header">
      <div>
         <a href="{link}">{name}</a>
      </div>
      <div class="info">{description}</div>
   </div>
</div>

手动配置SSL,并使用域名访问

如果在安装Typecho应用模版前,没有购买域名、备案、申请SSL,通过以下内容,手动配置。

  • 添加域名(hupifeng.cn),申请对应域名的证书,右侧下载Nginx证书
  • 将 hupifeng.cn_bundle.crt,hupifeng.cn.key 两个文件拷贝到此目录/local/lighthouse/softwares/nginx/certificates)
  • 查看 /usr/local/lighthouse/softwares/nginx/conf/include 路径下 hupifeng.cn.conf(如果没有对应域名的配置文件,手动添加)
# https hupifeng.cn.conf 的配置
# "hupifeng.cn"相关的五个地方需要手动修改成自己的域名

server {
  listen 443 ssl;
  server_name hupifeng.cn;
  server_tokens off;
  keepalive_timeout 10;
  ssl_certificate /usr/local/lighthouse/softwares/nginx/certificates/hupifeng.cn_bundle.crt;
  ssl_certificate_key /usr/local/lighthouse/softwares/nginx/certificates/hupifeng.cn.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;

  index index.php index.html;

  root /usr/local/lighthouse/softwares/typecho;
  if (!-e $request_filename) {
    rewrite ^(.*)$ /index.php$1 last;
  }

  location ~ .*\.php(\/.*)*$ {
    include fastcgi.conf;
    fastcgi_pass 127.0.0.1:9000;
  }

  # 禁 止 访 问 的 文 件 或 目 录
  location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) {
    return 404;
  }

  location ~ \.well-known {
    allow all;
  }

  access_log "logs//hupifeng.cn.log";
  error_log "logs//hupifeng.cn.error.log";
}

设置 HTTP 请求自动跳转 HTTPS

# 作用,下次打开http链接会自动转到https
# 在 hupifeng.cn.conf 文件后继续追加如下内容

server {
    listen 80;
    #请 填 写 绑 定 证 书 的 域 名
    server_name hupifeng.cn;
    #把 http的 域 名 请 求 转 成 https
    return 301 https://$host$request_uri;
}

启用、重启nginx

# 查看Nginx进程运行状态
ps -ef | grep nginx
# 开启、停止、重启
cd /usr/local/lighthouse/softwares/nginx/sbin

./nginx

./nginx -s stop

./nginx -s reload
# 或者一条命令重启
/usr/local/lighthouse/softwares/nginx/sbin/nginx -s reload

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/554698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSPM 未来发展的思考

由于数据泄露的持续威胁以及云的短暂和快节奏的特性&#xff0c;只有在最基础的层面上保护您的云才有意义。组织已经转向 CSPM 解决方案来锁定他们的平台。 今天我们来聊聊什么是CSPM&#xff0c;它如何去产生有有效的帮助&#xff0c;未来会向哪发展。 什么是 CSPM&#xff1…

【王道·操作系统】第一章计算机系统概述

一、 操作系统的基本概念 1.1 概念&#xff08;定义&#xff09;&#xff1a;什么是操作系统 操作系统operating system,OS&#xff1a;控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机的工作和资源的分配&#xff1b;以提供给用户和其他软件方…

防火墙之iptables(二)

防火墙之iptables&#xff08;二&#xff09; 一.SNAT原理与应用 1.应用环境 局域网主机共享单个公网IP地址接入Internet&#xff08;私网不能被Internet中正常路由&#xff09;2.SNAT原理 修改数据包的源地址内网访问外网 将从内网发送到外网的数据包的源IP由私网IP转换成…

Java-API简析_java.lang.Double类(基于JDK1.8)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/130805572 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

海睿思分享 | 浅谈医院大数据中心建设

随着大数据在医疗行业临床诊疗、医院管理、健康管理等领域应用热度增加&#xff0c;越来越多医院设立了大数据中心或者在信息中心基础上开展了大数据的建设。 什么是大数据中心&#xff1f;大数据中心和CDR的区别是什么&#xff1f;医院应该怎样进行大数据建设&#xff1f; 1 …

记录监控日志数据

日志数据简介 日志数据是系统、应用程序或网络设备上发生的所有事件的记录。启用日志记录后&#xff0c;系统会自动生成日志并带有时间戳。日志数据提供详细信息&#xff0c;例如谁是事件的一部分、发生的时间、发生的位置和方式。因此&#xff0c;它是解决操作问题和检测安全…

数据结构课程设计一元稀疏多项式计算器

数据结构课程设计任务书 学生姓名&#xff1a; 专业班级&#xff1a; 指导教师&#xff1a; 工作单位&#xff1a; 题 目: 一元稀疏多项式计算器 基础要求&#xff1a; 一元稀疏多项式简单计算器的基本功能是…

C++ 基础学习5

C 基础学习5 std::variantstd::remove、erasestd::string::erasestd::filesystemconst和constexpr的区别coreDump和异常的区别 实战 std::variant 参考&#xff1a;https://blog.csdn.net/hang_ning/article/details/123826220 https://blog.csdn.net/janeqi1987/article/deta…

SpringBoot使用-基于Idea搭建WebSocket应用

文章目录 前言搭建WebSocket应用的实操流程验证总结前言 SpringBoot是所有基于Spring开发项目的起点,使得开发者能快速搭建 Spring 项目。在Idea集成工具环境下,通过使用SpringBoot,开发人员选用合适的Maven设置,能够方便地搭建WebSocket应用。 搭建WebSocket应用的实操流…

Elastic Stack

一、简介 ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;官网https://www.elastic.co/cn。包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析&#xff0c;它还可以支持其它任何数据搜索、分析和收集的场景&#…

推荐5款简单实用的win10小工具

今天要给大家推荐5款压箱底的宝贝软件了&#xff0c;百度搜索一下就能找到下载链接了。 1.笔记与知识管理——Evernote Evernote是一款功能强大的笔记管理工具,它可以帮助你记下生活中的点点滴滴并进行管理。这个工具拥有简洁的界面和强大的功能,可以添加文本、图片、录音、网…

tomcat maxThread 压力测试 700 并发以内最好

以前一直简单的认为多线程高效率。其实多线程本身并不能提高 cpu 效率&#xff0c;线程过多反而会降低 cpu 效率。当 cpu 核心数<线程数时&#xff0c;cpu 就需要在多个线程直接来回切换&#xff0c;以保证每个线程都会获得 cpu 时间&#xff0c;即通常我们说的并发执行。所…

基于python的WEIBO热点话题检测

微博是一个拥有海量用户的社交媒体平台&#xff0c;每天都会涌现出大量的话题和热点讨论。本文将介绍如何使用Python来实现微博热点话题检测技术&#xff0c;通过对微博文本的分析和处理&#xff0c;准确地捕捉到当前最热门的话题。 1. 数据获取 为了进行微博热点话题的检测&…

部门来了个测试开发,听说是00后,上来一顿操作给我看呆了...

公司新来了个同事&#xff0c;听说大学是学的广告专业&#xff0c;因为喜欢IT行业就找了个培训班&#xff0c;后来在一家小公司实习半年&#xff0c;现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍&#xff0c;服务器缩减一半&#xff0c;性能反而提升4倍&#xff01…

快速上手MATLAB:科研、工程、数据分析,MATLAB入门(上)教你基础知识!+分享MATLAB完全学习手册资料(视频+课件+代码

快速上手MATLAB&#xff1a;科研、工程、数据分析&#xff0c;MATLAB入门&#xff08;上&#xff09;教你基础知识&#xff01; 福利&#xff1a;文末有资料分享&#xff01;&#xff01; 前言零基础的人学matlab&#xff0c;需要哪些基础知识&#xff1f; 一、认识MATLAB1. MA…

【Flutter 工程】001-Flutter 状态管理:Riverpod

【Flutter 工程】001-Flutter 状态管理&#xff1a;Riverpod 文章目录 【Flutter 工程】001-Flutter 状态管理&#xff1a;Riverpod一、概述1、官方状态管理2、状态管理解决方案3、为什么选择 RiverpodRiverpod 官方文档Riverpod 提供的几种 Provider 二、官方示例1、安装2、官…

Linux中vim编辑器

目录 Linux中vim编辑器 学习vim的原因 vim的三种模式 命令模式 输入模式 末行模式 模式切换方法 模式的常用命令 命令模式 --- 光标移动 命令模式 --- 赋值、粘贴、删除 命令模式 --- 文件内容查找 命令模式 --- 撤销编辑及保存退出 末行模式 --- 保存文件及退出vi…

探究企业角色权限管理的重要性及实践方法

角色权限管理是企业网盘工具中的重要功能。它是指将特定角色分配给用户&#xff0c;然后根据用户的工作要求为这些角色分配访问权限的过程。通过使用基于角色的权限&#xff0c;组织可以确保员工只能访问执行工作职责所需的文件和文件夹。那么企业角色权限管理有必要吗&#xf…

提高测试效率,用封装自动化框架实现Web页面自动滚动!

目录 前言&#xff1a; 一、什么是Web自动化框架&#xff1f; 二、为什么需要封装&#xff1f; 三、自动页面滚动功能实现原理 四、封装代码实现 五、总结 前言&#xff1a; Web自动化是现代软件开发过程中的重要组成部分&#xff0c;为了提高开发效率&#xff0c;开发人…

【限时开放!99元交个朋友】ChatGPT AIGC研讨社拉新!

前言 不知道你是否有这样的困惑&#xff1a;想探索ChatGPT的奥秘&#xff0c;却不知道如何入手&#xff1f;想让ChatGPT助力学习工作&#xff0c;却不知如何调教&#xff1f;想在AI浪潮中勇立潮头&#xff0c;却找不到学习路径&#xff1f;怀揣创新想法&#xff0c;却不知如何…