Ryan

Typecho首页实现自动摘要的方法
之前在修改32MB的主题的时候,主页文章列表默认输出的是文章的所有内容,这样非常不美观,在别的TE主题翻了一下,发...
扫描右侧二维码阅读全文
24
2014/08

Typecho首页实现自动摘要的方法

之前在修改32MB的主题的时候,主页文章列表默认输出的是文章的所有内容,这样非常不美观,在别的TE主题翻了一下,发现TE是内建输出摘要的方法的。调用方法:

<?php $this->excerpt(300, ‘…’); ?>

但是,这种方法截取出来的和WordPress哪个摘要的函数一样,有点不美观,而我想实现的是像WP excerpt那样自动输出第一个p标签包裹的文字,我不会正则,所以在TE论坛搜了一下,找到了糖兜写的代码,没有WP excerpt那么强大,但是已经是略为美观了。

<?php
preg_match_all('/<p>.*?<\/p>/im', $this->content, $m);
//print_r ($m[0]);
//如果有一个以上的p
if (count($m[0]) > 0) {
    //echo('--第一个P字符串长度--'.strlen($m[0][0]).'<hr>');
    //如果第一个p字数小于200
    if (strlen($m[0][0]) < 200) {
        //则输出第一个p+第二个p (如果没有第二个p php好像会自动忽略)
        echo ($m[0][0] . $m[0][1]);
    } else {
        //输出第一个p
        echo ($m[0][0]);
    }
} else {
    //echo('没有找到p,输出摘要:<hr>');
    $this->excerpt(300, '...');
}
//echo('<hr>-----数量'.count($m[0]));
?>

2017.08.23更新
评论里提到如何去除图片,我改动了一下,代码

<?php
preg_match_all('/<p>.*?<\/p>/im', $this->content, $m);
if (count($m[0]) > 0) {
    if (strlen($m[0][0]) < 200) {
        $result = $m[0][0] . $m[0][1];
    } else {
        $result = $m[0][0];
    }
    $result = preg_replace("/<[img|IMG].*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/", "", $result);
    echo $result;
} else {
    $this->excerpt(300, '...');
}
?>

2017.09.20更新
段落数<2且内容长度过短会报错,把

if (strlen($m[0][0]) < 200) {

修改为

if(strlen($m[0][0]) < 200 &&  count($m) > 1){

即可去除报错。

话说TE的官方文档真是坑爹啊,啥都没有,找点代码都要翻别人的主题。-_-#

搬瓦工年付$187机房套餐补货了,电信联通优化,512M内存/500G流量/1G带宽,建站稳定,优惠码:BWH1ZBPVK,【点击购买】!
搬瓦工年付$28CN2高速线路,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快,建站稳定,优惠码同上,【点击购买】!
Last modification:March 9th, 2018 at 04:08 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

15 comments

  1. 山小炮

    好东西,想请问下能否排除p里面的img标签。比如第一段p标签包裹着img标签。

    1. Ryan
      @山小炮

      评论不能发代码,贴到正文了

    2. Ryan
      @山小炮

      echo $m0 换成
      $result = preg_replace("/<[img|IMG].*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/","",$m0);
      echo $result;

      1. 山小炮
        @Ryan

        @Ryan非常感谢~~ :roll:

  2. 茶文化

    技术类的内容,我只有打酱油

  3. 雨皓

    谢谢!

  4. 千金方

    我一直用typecho :oops:

  5. mooc

    看了下代码,效果应该不错。其实手动加more也挺好的= =

    1. Ryan
      @mooc

      没这习惯

  6. 路易大叔

    WP excerpt 代码应该可以用吧

    1. Ryan
      @路易大叔

      WP except代码太多了,搞不来

  7. 超級efly

    前來支持一下~~我還是喜歡WordPress~~ :-P

  8. 无纯洁

    我在想32m跑ghost如何 :idea:

    1. Ryan
      @无纯洁

      我感觉实在作死,话说CloudShards的32mb又有货了

      1. 无纯洁
        @Ryan

        CloudShards 32m太贵了,折腾不划算,而且我收到邮件CloudShards LA打算从MC搬走