我已经成功创建了一个简单的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)如果我将一个或多个项目标记为“已读”,然后告诉邮件更新提要,则会再次提取所有项目,就像我从未首先下载它们一样.
2)如果我删除了一个或多个项目,他们会再次回来,再次阅读,就好像这是我第一次订阅该Feed一样.
3)Feed始终标记为已更新.应该是这样吗?
是否与我正在设置的参数有关,我是否省略了某些内容,或者解决方案是否更像设置HTTP内容标题(例如’304 Not Modified’)?
我对rss的理解是,一旦一个项目被标记为从客户端读取或删除,它就永远不会回来,这就是我所追求的行为.
需要注意的是,’link’和’guid’参数始终是唯一的,我尝试使用’published’和’publishdate'(两个可选)属性只能得到相同的结果.上面的代码是我所拥有的简化版本,仅显示相关位,最后,是的,我已阅读了rss specification.
在此先感谢您提供的任何帮助,我将很乐意澄清任何一点.
解决方法:
根据Zend Framework Doc,您必须使用lastUpdate参数来设置条目的上次修改日期.
'entries' => array(
array(
[...]
'lastUpdate' => 'timestamp of the publication date', // optional
[...]
因此发布了feed,并为条目发布了lastUpdate.