Typecho默认是全文输出的,想摘要的话,官方给出了最简单的方法,就是在你想截取的位置加上more标签即可。
但是这种方法在有图片文章的情况下摘要就会出现图片信息,也完全暴露了标签元素,影响美观,下面就给出了PHP正则表达式自动摘要的两种解决方法。
注:如果没有标签,会自动截取文章的前270字当作缩略输出。
编辑主题index.php文件,找到以下PHP
<?php $this->content('阅读剩余部分...'); ?>
替换为你想实现的代码,如下;
输出图片的正则表达式代码:
<?php if(preg_match('/<!--more-->/',$this->content)||mb_strlen($this->content, 'utf-8') < 270) { $this->content('阅读全文...'); } else { $c=mb_substr($this->content, 0, 270, 'utf-8'); echo $c.'...'; echo '</br><p class="more"><a href="',$this->permalink(),'" title="',$this->title(),'">阅读全文...</a></p>'; } ?>
不输出图片的正则表达式代码:
<?php if(preg_match('/<!--more-->/',$this->content)||mb_strlen($this->content, 'utf-8') < 270) { $this->content('阅读全文...'); } else { $c=mb_substr($this->content, 0, 270, 'utf-8'); $c=preg_replace("/<[img|IMG].*?src=[\'\"](.*?(?:[\.gif|\.jpg|\.jpeg|\.png|\.tiff|\.bmp]))[\'|\"].*?[\/]?>/","",$c); echo $c.'...'; echo '</br><p class="more"><a href="',$this->permalink(),'" title="',$this->title(),'">阅读全文...</a></p>'; } ?>
如果截取的文章前面存在代码段,由于自动截取遇到代码段虽然截取了但是没有添加结束标签,所以会造成整站css的错乱,使用正则查找是否存在代码段,如果存在截取后自动添加结束标签,下面是修正版正则式代码。
修正版:
输出图片的正则表达式代码:
<?php if(preg_match('/<!--more-->/',$this->content)||mb_strlen($this->content, 'utf-8') < 270) { $this->content('阅读全文...'); } else { $c=mb_substr($this->content, 0, 270, 'utf-8'); if(preg_match('/<pre>/',$c)) { echo $c,'</code></pre>','...';; } else { echo $c.'...'; } echo '</br><p class="more"><a href="',$this->permalink(),'" title="',$this->title(),'">阅读全文...</a></p>'; } ?>
不输出图片的正则表达式代码:
<?php if(preg_match('/<!--more-->/',$this->content)||mb_strlen($this->content, 'utf-8') < 270) { $this->content('阅读全文...'); } else { $c=mb_substr($this->content, 0, 270, 'utf-8'); $c=preg_replace("/<[img|IMG].*?src=[\'\"](.*?(?:[\.gif|\.jpg|\.jpeg|\.png|\.tiff|\.bmp]))[\'|\"].*?[\/]?>/","",$c); if(preg_match('/<pre>/',$c)) { echo $c,'</code></pre>','...';; } else { echo $c.'...'; } echo '</br><p class="more"><a href="',$this->permalink(),'" title="',$this->title(),'">阅读全文...</a></p>'; } ?>