Typecho 添加指定页面/文章评论到 Feed



一直想把页面 微语 最新评论动态添加到博客 Feed 中,今天总算是找到了大佬 【立云图志】的方法,记录一下。

前言

功能:在博客 Feed 订阅源页面中,输出指定文章(如:说说)下的评论 Feed 内容,让小伙伴在订阅博客 Feed 时,也能看到博主的(说说)动态信息。

工作原理:Typecho 有博客 Feed 显示博客最新 10 篇文章,另外,还有文章 Feed 展示文章内容和该文章下的评论信息,而部分博客的(说说)功能,刚好是使用文章下的评论作为心情动态的提交发布。本文档即是把指定文章下的评论信息,整合到博客 Feed 页面中。

适用程序: 适用程序:Typecho ,程序版本:1.2.1

原文地址: http://www.lopwon.com/attachment/3677/

方法

A、 涉及文件

var/Widget/Archive.php

B、 改造文件

打开文件 var/Widget/Archive.php 搜索找到第 1477 行,将 else {...} 里的代码全部替换为以下代码(留意注释,以及按需修改),我这里的代码针对标题在原代码上稍微有点修改。



/** * 文章 */
 $this->feed->setTitle($this->options->title . ($this->archiveTitle ? ' - ' . $this->archiveTitle : null));
 $postArr = [];
 while ($this->next()) {
     $suffix = self::pluginHandle()->trigger($plugged)->feedItem($this->feedType, $this);
     if (!$plugged) {
         $suffix = null; }
         $feedUrl = '';
         if (Feed::RSS2 == $this->feedType) {
             $feedUrl = $this->feedUrl;
             } elseif (Feed::RSS1 == $this->feedType) {
                 $feedUrl = $this->feedRssUrl;
                 } elseif (Feed::ATOM1 == $this->feedType) {
                     $feedUrl = $this->feedAtomUrl;
                     }
                     $postArr[] = [
                     'title' => $this->title,
                     'content' => $this->options->feedFullText ? $this->content
                     : (false !== strpos($this->text, '<!--more-->') ? $this->excerpt .
                     "<p class=\"more\"><a href=\"{$this->permalink}\" title=\"{$this->title}\">[...]</a></p>"
                     : $this->content),
                     'date' => $this->created,
                     'link' => $this->permalink,
                     'author' => $this->author,
                     'excerpt' => $this->___description(),
                     'comments' => $this->commentsNum,
                     'commentsFeedUrl' => $feedUrl,
                     'suffix' => $suffix
                     ];
                     }
                     $postItemArr = [];
                     foreach ($postArr as $postItem) {
                         $postItemArr[] = $postItem;
                         } 
 /** * 评论 */
    $comments = Recent::alloc('pageSize=3&parentId=4'); // pageSize=5 为输出评论的数量;parentId=2 为指定文章的 cid
    $commentArr = [];
    while ($comments->next()) {
        $suffix = self::pluginHandle()->trigger($plugged)->commentFeedItem($this->feedType, $comments);
        if (!$plugged) {
            $suffix = null;
         }
        $commentArr[] = [
         // 'title' => strlen(strip_tags($comments->content)) > 0 ? strip_tags($comments->content) : '图片说说,点击查看', // 如果评论(说说)中只有图片或表情图标,没有文字时,输出自定义提示内容
            'title' => ' '. date('Y-m-d H:i:s', $comments->created) .' - 微语 - '. $comments->author.' ',
            'content' => $comments->content,
            'date' => $comments->created,
            'link' => $comments->permalink,
            'author' => (object)[
            'screenName' => $comments->author,
            'url' => $comments->url,
            'mail' => $comments->mail
         ],
            'excerpt' => strlen(strip_tags($comments->content)) > 0 ? strip_tags($comments->content) : '图片说说,点击查看',
            'suffix' => $suffix
        ];
        }
            $commentItemArr = [];
            foreach ($commentArr as $commentItem) {
                if ($commentItem['author']->screenName == $comments->author) { // 只输出博主的评论,或把 $comments->author 改为 '博主登录名'
                 $commentItemArr[] = $commentItem;
                 }
                } 
 /** * 合并排序 */
          $moodArr = array_merge($postItemArr, $commentItemArr);
          usort($moodArr, function($a, $b) {
              return $b['date'] - $a['date'];
              });
              foreach ($moodArr as $mood) {
                  $this->feed->addItem($mood);
                  }

注意: 请将以上代码中,有注释行的参数修改为自己需要的,作用是:将指定页面、指定数量的评论输出到博客 Feed 中,该数量不受博客 Feed 默认的 10 篇影响,也就是博客 Feed 输出的数量将变更为(10 + 评论数量),如果需要修改博客 Feed 默认的 10 篇数量,请修改第 276 行的 pageSize=10 数量。

至此,访问博客 Feed 地址后,就能看到输出的指定文章下的评论信息了,并且,文章和评论(说说)按照发布时间混合排序。

提示

本法需修改程序源文件,请先备份再操作!!!升级程序后,本方法将失效,需重新修改此处程序代码。



 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
(*) 8 + 4 =
共 3 条评论, 2 次评论点赞。快来参与吧!
    8月30日 北京市 发自Windows 10 回复 1

    大佬,这个确实有用,最近刚用typecho搭建的博客还得多学习!

    8月23日 江苏省无锡市 发自Mac OSX 回复 1

    6,哈哈哈,我在之前开启过。后来发现有点小问题。我又取消了。不过你的应该问题不大。

      8月23日 湖北省武汉市 发自Windows 10 回复 0

      你的第100条留言。