2009-03-18 7 views
4

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

그래서, 내가 할 수있는 클라이언트를 가리키는 피드에 액세스 할 수 :

나는 RSS 피드를 만들려면이 간단한 기능을 사용 http://mysite.com/rss

나는 mac 메일의 rss 클라이언트를 사용하여 테스트하고 있습니다. 피드가 제대로 다운로드되어 테스트 목적으로 데이터베이스에있는 5 가지 항목을 모두 보여줍니다. 문제는 다음과 같습니다.

1) 하나 이상의 항목을 '읽음'으로 표시 한 다음 메일에 피드를 업데이트하도록 지시하면 처음부터 다운로드 한 적이없는 것처럼 모든 항목을 다시 가져옵니다.

2) 내가 하나 이상의 항목을 삭제하면 다시 피드에 가입 한 것처럼 읽지 않은 상태로 다시 나타납니다.

3) 피드는 이고 항상 업데이트로 표시된입니다. 그게 사실인가요?

내가 설정 한 매개 변수와 관련이 있습니까, 뭔가를 생략하고 있거나 솔루션이 HTTP 콘텐츠 헤더 (예 : '304 Not Modified')를 설정하는 것처럼 더 미묘 할 수 있습니까?

rss를 이해하면 항목이 클라이언트에서 읽은 것으로 표시되거나 삭제 된 후에는 절대로 다시 나타나지 않아야합니다. 이는 내가 수행 한 동작입니다.

'link'및 'guid'매개 변수는 항상 고유하며 'published'및 'publishdate'(둘 다 선택 사항) 속성은 동일한 결과 만 얻습니다. 위의 코드는 내가 가지고있는 것의 단순화 된 버전이며 관련 비트 만 표시하고 마지막으로 예, rss specification을 읽었습니다.

여기에 제공된 도움에 대해 미리 감사 드리며 언제든지 알려 드리겠습니다.

답변

4

Zend Framework Doc에 따르면 lastUpdate 매개 변수를 사용하여 항목의 최종 수정 날짜를 설정해야합니다. 항목에 대한

'entries'  => array(
         array(
           [...] 
           'lastUpdate' => 'timestamp of the publication date', // optional 
           [...] 
그래서 공급에 대한 출판

LASTUPDATE.

+0

감사합니다 allterrnativ, 나는 이걸주고있다. – karim79

+0

실제로 그것은 매력처럼 작동했습니다. 그게 얼마나 위선적 인 것일까 요? 다시 한 번 감사드립니다! – karim79

관련 문제