如何正确创建Zend Feed?

时间:2009-03-18 09:52:45

标签: php zend-framework rss

我已经成功创建了一个简单的RSS提要,但是条目一直保持未读和更新状态,每次我要求邮件更新提要时,从客户端删除的条目都会重新出现。

我做错了什么?

我使用这个简单的函数来创建一个rss feed:

public static function getFeed($db)
{
    $title = 'Latest feeds';
    $feedUri = '/rss/';

    //link from which feed is available
    $link = 'http://' . $_SERVER['HTTP_HOST'] . $feedUri;

    //create array according to structure defined in Zend_Feed documentation
    $feedArr = array('title' => $title,
                     'link'  => $link,
                     'description' => $title,
                     'language' => 'en-us',
                     'charset' => 'utf-8',
                   //'published' => 1237281011,
                     'generator' => 'Zend Framework Zend_Feed',
                     'entries' => array()
              );
    $itemObjs = array();
    $select = $db->select('id')->from('things')
                               ->order('createddate desc')
                               ->limit(10);
    $results = $db->fetchAll($select->__toString());
    $count = count($results);
    for($i=0;$i<$count;$i++) {
        $itemObjs[] = SiteUtil::getItemObjectInstance($db, $results[$i]['id']);
    }
    $count = count($itemObjs);
    for($i=0;$i<$count;$i++) {
        $obj = & $itemObjs[$i];
        $feedArr['entries'][] = array('title' => $obj->getSummary(),
                                      'link'    => 'http://' . $_SERVER['HTTP_HOST'] . $obj->getDetailUri(),
                                      'description' => $obj->description,
                                      'publishdate' => $obj->publishedDate,
                                      'guid' => 'http://' . $_SERVER['HTTP_HOST'] . $obj->getDetailUri()
                                      );
    }
    $feed = Zend_Feed::importArray($feedArr, 'rss');
    return $feed;
}

控制器类中的操作是:

public function rssAction()
{
    $feed = FeedUtil::getFeed($this->db);
    $feed->send();
}

因此,为了访问Feed,我将客户端指向: http://mysite.com/rss

我正在使用mac mail的rss客户端进行测试。 Feed很好地下载,显示我在数据库中的所有5个项目用于测试目的。问题如下:

1)如果我将一个或多个项目标记为“已读”,然后告诉邮件更新Feed,它会再次拉出所有项目,就好像我从未首先下载它们一样。

2)如果我删除了一个或多个项目,他们会再次回来,再次阅读,就好像这是我第一次订阅该Feed一样。

3)Feed 始终标记为已更新。应该是这样吗?

是否与我正在设置的参数有关,我是否省略了某些内容,或者解决方案是否更像设置HTTP内容标题(例如'304 Not Modified')?

我对rss的理解是,一旦一个项目被标记为从客户端读取或删除,它就永远不会回来,这就是我所追求的行为。

请注意,'link'和'guid'参数始终是唯一的,我尝试使用'published'和'publishdate'(两个可选)属性只能得到相同的结果。上面的代码是我所拥有的简化版本,仅显示相关位,最后,是的,我已阅读rss specification

在此先感谢您提供的任何帮助,我很乐意澄清任何一点。

1 个答案:

答案 0 :(得分:4)

根据Zend Framework文档,您必须使用 lastUpdate 参数来设置条目的上次修改日期。

 'entries'     => array(
                         array(
                               [...]
                               'lastUpdate'   => 'timestamp of the publication date', // optional
                               [...]

所以发布作为Feed, lastUpdate 表示条目。