Typecho 正则表达式首页自动摘要

Typecho默认是全文输出的,想摘要的话,官方给出了最简单的方法,就是在你想截取的位置加上标签即可。

但是这种方法在有图片文章的情况下摘要就会出现图片信息,也完全暴露了标签元素,影响美观,下面就给出了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>';
    }
?>

如果截取的文章前面存在代码段,由于自动截取遇到代码段虽然截取了但是没有添加</code></pre>结束标签,所以会造成整站css的错乱,使用正则查找是否存在代码段,如果存在截取后自动添加结束标签,下面是修正版正则式代码。

修正版:

输出图片的正则表达式代码:

PHP
    <?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>';
            }
        ?>

技术支持:Oh lovely

可以参考他的文章:

Typecho自动摘要截取功能

Typecho自动摘要截取代码段处理


标签: typecho首页摘要, typecho自动摘要

已有 7 条评论

  1. Bohalph Bohalph   Windows 7 Windows 7   Maxthon  Maxthon

    老哥 请教下 使用摘要风格线 和显示全文有冲突 显示全文的时候只显示摘要怎么解决啊

    1. Cyclists站长 Cyclists   Windows 7 Windows 7   Google Chrome  Google Chrome

      后台设置仅摘要输出即可。

  2. Jabiler Jabiler   Windows 10 Windows 10   Google Chrome  Google Chrome

    感谢分享,Typecho是很简洁,以至于一些基本功能都要上代码,对于我这种小白很难,最后感谢分享,用上了。^_^

    1. inwao world站长 inwao world   Windows 7 Windows 7   Google Chrome  Google Chrome

      用上了就好,慢慢学一些基本的CSS和PHP呀,你也可以的。

  3. 林先生 林先生   Windows 7 Windows 7   Google Chrome  Google Chrome

    我想问一下,“阅读全文” 这几个字 怎么往下靠右边显示。我现在添加进去的效果是居中的。

    1. inwao world站长 inwao world   Windows 10 Windows 10   Google Chrome  Google Chrome

      因为我添加了靠右显示CSS代码呀。

添加新评论