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自动摘要

已有 5 条评论

  1. 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呀,你也可以的。

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

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

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

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

  3. 喔!可爱! 喔!可爱!   Windows 10 Windows 10   Google Chrome  Google Chrome

    春哥这个代码不含代码块截取部分,所以截取代码可能存在问题。

添加新评论