Typecho 实现短代码功能。
前几天,准备对博客首页大改。在寻找灵感的途中。发现有的博客实现了一些好玩的功能。
这个短代码就是其中之一。
毕竟markdown里没有太明显的提示或警告。
稍微研究了一下。
演示
短代码标记info:一般提示
warning:警告提示
Error:危险提示
info:多行内容测试:
生活如酒,或芳香,或浓烈,因为诚实,它变得醇厚;生活如歌,或高昂,或低沉,因为守信,它变得悦耳; 生活如画,或明丽,或素雅,因为诚信,它变得美丽。
生活如酒,或芳香,或浓烈,因为诚实,它变得醇厚;生活如歌,或高昂,或低沉,因为守信,它变得悦耳; 生活如画,或明丽,或素雅,因为诚信,它变得美丽。
原理
很简单的一个原理,用正则匹配短代码标签,把他替换成样式就OK了。
方法
在主题的 functions.php 的文件里,新建个函数。
// 短代码测试
function getContentTest($content) {
$pattern = '/\[(info)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '<div class="hint hint-info"><span class="glyphicon glyphicon-info-sign hint-info-icon" aria-hidden="true"></span>$2</div>';
$content = preg_replace($pattern, $replacement, $content);
$pattern = '/\[(warning)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '<div class="hint hint-warning"><span class="glyphicon glyphicon-question-sign hint-warning-icon" aria-hidden="true"></span>$2</div>';
$content = preg_replace($pattern, $replacement, $content);
$pattern = '/\[(danger)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '<div class="hint hint-danger"><span class="glyphicon glyphicon-exclamation-sign hint-danger-icon" aria-hidden="true"></span>$2</div>';
$content = preg_replace($pattern, $replacement, $content);
return $content;
}
短代码然后把主题里输出文章内容的函数(共三处处:index.php 、page.php 和 articles.php)
<?php $this->content(); ?>换成你刚刚添加的
<?php echo getContentTest($this->content); ?
articles.php文章摘要去除短代码标记
原理:对excerpt函数输出的内容再次正则匹配,来在摘要中剔除 短代码标记 。
在输出的摘要中剔除短代码标记// 摘要短代码测试
function getExcerptTest($excerpt,$num,$str) {
$pattern = '/\[(info)\](.*?)\[\s*\/\1\s*\]/';
$replacement = ' $2 ';
$excerpt = preg_replace($pattern, $replacement, $excerpt);
$pattern = '/\[(warning)\](.*?)\[\s*\/\1\s*\]/';
$replacement = ' $2 ';
$excerpt = preg_replace($pattern, $replacement, $excerpt);
$pattern = '/\[(danger)\](.*?)\[\s*\/\1\s*\]/';
$replacement = ' $2 ';
$excerpt = preg_replace($pattern, $replacement, $excerpt);
//使用mb_substr防止中文截取成乱码,需要开启extension=php_mbstring.dll扩展,一般都开了
return mb_substr($excerpt,0,$num,"UTF-8").$str;
}
functions.php使用下面的代码替换原有摘要输出(150是截断字数, ' ......' 是需要显示的提示)
<?php echo getExcerptTest($this->text,150,' ......'); ?>
替换原有摘要输出typecho文章内容失效提醒。
提示效果
用的是上一篇文章的警告提示的样式
提示效果修改方法
修改typecho主题的post.php文件,在需要提醒的位置添加以下内容.
<!--设置需要提醒的时间-->
<?php $halfyear = 3600 * 24 * 30 * 6; ?>
<!--计算文章距离上次修改的时间-->
<?php $lostTime = time() - $this->modified; ?>
<!--判断是否需要提醒-->
<?php if ($lostTime > $halfyear): ?>
<!--提醒样式开始-->
<div class="hint hint-warning">
<span class="glyphicon glyphicon-question-sign hint-warning-icon" aria-hidden="true"></span><span class="sr-only">warning:</span>
这篇文章距离上次修改已过<?php echo floor($lostTime/86400); ?>天,其中的信息可能已经有所发展或是发生改变。
</div>
<!--提醒样式结束-->
<?php endif; ?>

首先打开Maven下conf目录的settings.xml文件

在96行左右,把<proxy>的注释取消掉
<proxy>
<!--代理的id,选填-->
<id>optional</id>
<!--是否启用这个代理-->
<active>true</active>
<!--代理的协议http https socks-->
<protocol>http</protocol>
<!--代理的用户名密码,没有的话注释掉-->
<username>proxyuser</username>
<password>proxypass</password>
<!--代理的地址(ip或域名)-->
<host>proxy.host.net</host>
<!--代理的端口-->
<port>80</port>
<!--不启用代理的Hosts-->
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy> 