本博客创建之后针对Typecho做的代码修改

我在2016年12月29日晚购买主机之后,主机商问我想要安装哪款程序,我说zblog吧。当时我已经厌烦了wordpress的臃肿,虽然我2014年以后就没有再用wordpress。根据目前wordpress的4.8.1版本,解压出来要26.1M(Linux显示的数值和Windows会有差别,26.1M是Linux下的数值),虽然我不懂php,但可以想象它运行起来会消耗掉多少资源,对博客访问和读写的速度又会影响多大呢。当天晚上不知道是什么原因,zblog管理上很不顺畅。第二天我无意间看到了一位微博博友的独立博客,发现他用的是Typecho,然后我也下载并安装了,从此踏上了Typecho的不归路。下面介绍迄今为止本博客自创建之后所做的代码修改。

1 主题模板

Typecho安装之后,我开始不断安装各种主题,直到今天我还在测试下载到的主题。关于主题,Typecho下的主题不少,而我又是那种有强迫症的人,对主题挑三拣四,同时还要自己对其进行修改。我是外行,对php这东西完全不懂,而我只能靠这些年折腾独立博客积攒的经验,来对博客主题进行适当的修改。这个过程中,完全由试错进行。因为我看不懂代码,只能凭借comment、sidebar这些英文单词猜测那段代码是什么意思,根据页面显示出来的文字、效果等推测部分php代码是什么意思。如果需要添加代码时,我把代码放在不同的位置测试页面显示效果。这里必须重点提的是:我完全看不懂css代码,折腾博客这么多年我一直都看不懂。

对于主题的设计者,我非常敬重,对于这些计算机高手我非常佩服。在作者的允许之下(我主要看主题介绍页面,作者会明确提示该主题是否允许修改),我对主题进行少量改造。根据Typecho的不同组建代码进行综合,再根据html代码查找,我为博客添加了版权协议说明代码,如下:

    <blockquote>
本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/cn/"; target=_blank>知识共享署名-非商业性使用-禁止演绎 3.0 境内许可协议</a>进行许可。
<br/>
转载请注明:转自<a href="<?php $this->options->siteUrl(); ?>"><?php $this->options->title() ?></a><br/>
原文链接:<a href="<?php $this->permalink() ?>"><?php $this->permalink() ?></a>
</blockquote>

这里面的html代码部分,根据官方提供的代码,手动添加了target=_blank,以实现新窗口打开。

修改部分主题的显示效果。比如我今天(2017.10.21)更换的主题,添加上述代码后,会造成“本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 境内许可协议进行许可”这句话与下方的“上一篇、下一篇”紧贴在一起,看着不美观。经过测试,我在上述代码之后,添加了如下代码:

<br/>
<br/>

这样显示的就美观了。

同时我也会少量修改其他文件,完善显示内容。对于部分代码,无论我如何修改,就是无法显示想要的效果。我搜索一下,网上说需要修改css,遇到这种情况我就放弃了。

当然,有些主题设计的并不好。部分主题不支持评论嵌套,部分主题不支持评论框,部分主题作者添加了很多自己的信息,在别人使用这个主题后无法更改,比如各种logo。有的主题使用了Google fonts,导致博客打开超级慢,需要等待5分钟左右。如果你说,你既然不满意就自己改啊。那么,请阅读本小节的第一个自然段。

2017年11月14日更新:由于本博客不同博文采用不同的版权要求,所以我去掉了这段代码。

2 新窗口打开链接

Typecho 1.0版本中,除了手动添加target=_blank的html代码可以实现新窗口打开,其他代码均为原窗口打开。这样如果一位读者阅读我的文章时,看到我引用的超级链接并且点进去了,那么可能就回不来了。所以我要实现新窗口打开。从网上检索到了一些帖子,其中小z博客给出的方法有效。根据其介绍的方法,需要进行如下操作:

找到/var/CommonMark/HtmlRenderer.php这个文件,在105行,也就是$attrs['href'] = $this->escape($inline->getAttribute('destination'), true);之后添加如下两行代码:

$attrs['target'] = $this->escape(_blank, true);
$attrs['rel'] =$this->escape(nofollow, true);

修改后的完整代码如下:

    case CommonMark_Element_InlineElement::TYPE_LINK:
$attrs['href'] = $this->escape($inline->getAttribute('destination'), true);
$attrs['target'] = $this->escape(_blank, true); //typecho 1.0文章内连接新窗口打开
$attrs['rel'] = $this->escape(nofollow, true); //typecho 1.0文章内链接加上nofollow
if ($title = $inline->getAttribute('title')) {
$attrs['title'] = $this->escape($title, true);
}

这样就OK了。但是却无法实现评论中的链接新窗口打开。下面介绍如何使评论中的链接在新窗口中打开。

2017年11月14日更新:本文件在1.1版本中已经不存在。
2017年12月11日更新:有高手开发了新窗口打开插件

3 评论链接新窗口打开

根据挨踢路提供的方法,找到var/Widget/Abstract/Comments.php,在里面找到如下代码:

echo '<a href="' , $this->url , '"' , ($noFollow ? ' rel="external nofollow"' : NULL) , '>' , $this->author , '</a>';

然而,他提供的修改后的代码在我这里执行错误,于是我对这段代码进行新的修改,经过不断的测试,最终修改如下:

echo '<a href="' , $this->url , '"' , ($noFollow ? ' rel="external nofollow"' : NULL) , ' target="_blank">' , $this->author , '</a>';

4 开启全站HTTPS

开启HTTPS是未来的趋势,因为目前很多浏览器均对不加密的HTTP进行警告,因为HTTP未经加密,会被窃取重要资料,包括账号、密码、信用卡账号、电子邮件等。目前Let’s Encrypt和SSL For Free均提供了免费SSL证书,所以个人站长有福气了。这要感谢我的微博博友Victorika233告诉了我这个免费的SSL。

按照SSL For Free的引导,申请并获得证书,且在虚拟主机控制面板上安装SSL证书后,需要对站点进行更改。

首先,将站点的文件从public_html转移到private_html,然后,根据小z博客的介绍,在Typecho站点根目录下的文件config.inc.php文件中,加入了如下代码:

/* 开启HTTPS /
define('__TYPECHO_SECURE__',true);

注:1.1及以上的版本已经不需要配置这个了,直接可以支持HTTPS。

然而我发现,Typecho 1.0自带的主题,在HTTPS下,Firefox提示页面中含有不安全因素。小z博客那篇文章里提到了以下情况:

由于Chrome浏览器对HTTPS要求较高,Firefox已经显示小绿锁,可是Chrome还是有警告提示,F12查看,评论表单的action地址还是HTTP,找到站点主题目录下的comments.php文件,并搜索$this->commentUrl(),将其替换为:

echo str_replace("http","https",$this->commentUrl());

这个修改方法在一个论坛上也出现过,然而,在我这里却是无效的,Firefox下还是提示页面含有不安全因素,上面的绿锁还是会有一个感叹号。从网上查到各种帖子,均无法解决这个问题。

这时候我发现typecho的开发版中,主题有修改记录,于是我将开发版中的默认主题(版本:1.2)下载安装,发现这个问题已经修复了。随后我用了很长时间,直到最近又突发奇想更换了其他主题。

注:1.1及以上的版本已经不存在这个问题了,直接可以完美支持HTTPS。

5 将HTTP转移到HTTPS访问

浏览器输入网址后,默认是HTTP访问,这时需要将其跳转到HTTPS。试验了各种方法,其中网上提供的一个方法有效,可惜忘记保存出处,在这里向原作者致歉。

在public_html目录下,新建.htaccess文件,写入如下信息:

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.) https://%{SERVER_NAME}/$1 [R]

这样就可以直接302跳转了。个别主机不支持,可以配置301,在根目录该文件最头部写入如下代码:

RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

6 防止图片盗链

我一直没有往空间里传图片,都是用的图床。最近img.co图床被干掉了,本站链接的图片全部无法显示,因此还需要自己上传。这样的话,以后如果更换了主机,那么需要连图片一起转走。2013年我用的主机被关闭,幸好在此之前有数据库备份(但不全),我将数据库上传到了网易LOFTER,恢复了大部分文章(少部分上传后被LOFTER屏蔽了),但是图片全没了,因为主机被关闭是突然的,我没有来得及备份。在此多说一句,上次主机被关闭,不是主机商跑路,而是主机商租用的整台服务器被服务器商收回了,导致那几台服务器上的所有站点全部挂掉了,包括主机商自己的站点。当时主机商跟我道歉了,并且让我主动迁移站点。

但是由于种种原因,我目前只能自己上传。自己上传的话,被盗链是可怕的,会导致流量增高。因此需要防盗链。网上有人提供了方法,但部分方法会导致本博客访问出现问题。经过不断测试和修改,综合琥珀主机帮助中心SJY之家提供的方法,在站点文件存放的根目录下的.htaccess文件中,添加如下代码:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !****.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !Google.cn [NC]
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
RewriteRule .*.(gif|jpg|png|bmp)$ http://typecho.org/usr/themes/bluecode/img/screenshot/st1.png [R,NC,L]

经测试有效。在其他博客引用本站图片时,就会变成引用typecho.org主页的那张图片了。

7 开通评论邮件通知

这个请阅读我的上一篇文章《本博客开通评论邮件通知的始末》

8 存在的问题

目前发现,typecho下博文的{cid}不会连续。举例来说,发表了其中一篇文章,{cid}数值是23,如果我修改了这篇文章两次,那么再发表新文章时,{cid}就是26了。而且有时候还是不连续递增,比如中间只修改了两次,但是下一篇可能跳过了十几个数值,比如从114直接变成133。这个问题我不知道如何解决,也许这就是作者有意这样设计的吧。当然这个不影响博客的正常访问,也许等{cid}变成六位数以上的时候,已经是很多年以后了。

2017年11月18日更新:目前该问题阶段性解决,解决方案见:《解决{cid}不连续问题&搭建私人图床》

以上就是本博客建立之后到现在的10个月时间,对博客的访问、typecho及所使用的主题进行的有关修改。如果对你有用,就是我最大的欣慰。感谢广大网友对建站有关技术的无私分享,感谢帮助过我的博友,是你们的帮助才让我的博客有了今天。同时希望各位独立博客的站长们,多多来我的博客坐坐,并留下你的足迹。同时欢迎与我交换链接,常来常往。

2017年10月21日初稿
2017年10月22日修改几处错误

30 条回复

zhujiwiki 2017年10月29日 回复

也是改了不少,现在用tp,感觉合适

灰色头像 2017年11月17日 回复

我博客差不多也是被我改了这么些,要是早点看到这篇文章就好了,那样就不用一个个去百度上找了

林海草原 2017年11月17日 回复

没关系,自己查了很多资料折腾成功了,成就感更大。欢迎常来我的博客看看。

你魔改的不错 2018年4月21日 回复

博主魔改的主题不错,能否发一份呢

林海草原 2018年4月25日 回复

你去typecho主题官网下载即可,我只是改了一下字号和行间距,删除了一部分内容而已。

你魔改的不错 2018年4月25日 回复

比官方好看点,大众化,官方的评论就不怎么喜欢

林海草原 2018年5月1日 回复

官方?啥意思?这个主题就是根据官方的改的,但不是我改的,我只是根据原作者的主题略有调整。下载在这里:https://typecho.me/876.html

发表回复