之前在修改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的官方文档真是坑爹啊,啥都没有,找点代码都要翻别人的主题。-_-#