代码之家  ›  专栏  ›  技术社区  ›  karim79

如何正确创建Zend提要?

  •  4
  • karim79  · 技术社区  · 17 年前

    我已经成功地创建了一个简单的RSS提要,但是条目总是以未读和更新的形式返回,每次我要求mail更新提要时,从客户端删除的条目都会重新出现。

    我做错了什么?

    我使用这个简单的函数创建rss提要:

    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();
    }
    

    因此,要访问提要,我将客户端指向: http://mysite.com/rss

    1) 如果我将一个或多个项目标记为“已读”,然后告诉mail更新提要,它会再次提取所有项目,就好像我一开始从未下载过一样。

    2) 如果我删除了一个或多个条目,它们会再次返回,未读,就像我第一次订阅提要一样。

    3) 饲料是 标记为已更新。应该是这样吗?

    是与我正在设置的参数有关,是省略了什么,还是解决方案可能是更微妙的,比如设置HTTP内容头(例如“304未修改”)?

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

    需要注意的是,“link”和“guid”参数总是唯一的,我尝试过使用“published”和“publishdate”(两个可选)属性只得到相同的结果。上面的代码是我所拥有的代码的简化版本,只显示了相关的位,最后,是的,我已经阅读了 rss specification .

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

    1 回复  |  直到 17 年前
        1
  •  4
  •   altermativ    17 年前

    根据Zend Framework文档,您必须使用

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

    所以 为饲料,和 最近更新 对于条目。

    推荐文章