2009-03-18 13 views
4

Ich habe erfolgreich einen einfachen RSS-Feed erstellt, aber die Einträge kommen immer als ungelesen und aktualisiert zurück, und Einträge, die vom Client gelöscht wurden, erscheinen jedes Mal, wenn ich die Mail zur Aktualisierung des Feeds auffordere.Wie erstelle ich korrekt einen Zend Feed?

Was mache ich falsch?

Ich benutze diese einfache Funktion einen RSS-Feed zu erstellen:

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

Die Aktion in der Controller-Klasse ist:

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

Also den Feed zugreifen zu können, verweise ich den Client: http://mysite.com/rss

Ich benutze Mac Mail Rss Client zu testen. Der Feed wird problemlos heruntergeladen und zeigt alle 5 Elemente, die ich zu Testzwecken in der Datenbank habe. Die Probleme sind wie folgt:

1) Wenn ich ein oder mehrere Elemente als 'lesen' markieren und dann mail, um den Feed zu aktualisieren, zieht es alle Elemente wieder, als ob ich sie nie an erster Stelle heruntergeladen.

2) Wenn ich ein oder mehrere Elemente lösche, kommen sie wieder ungelesen wieder, als wäre es das erste Mal, dass ich den Feed abonniert habe.

3) Feeds sind immer markiert als aktualisiert. Soll das der Fall sein?

Hat etwas mit den Parametern zu tun, die ich einstelle, unterbreche ich etwas, oder könnte die Lösung etwas subtiler sein als das Setzen von HTTP-Content-Headern (z.B. '304 Not Modified')?

Mein Verständnis von rss ist, dass sobald ein Element als gelesen oder gelöscht vom Client markiert wurde, sollte es nie wieder kommen, was das Verhalten ist, nach dem ich bin.

Nur zu beachten, die 'Link' und 'Guid' Parameter sind immer eindeutig, und ich habe versucht, mit 'published' und 'publishdate' (beide optional) Attribute nur das gleiche Ergebnis zu erhalten. Der obige Code ist eine vereinfachte Version dessen, was ich habe und zeigt nur die relevanten Bits, und schließlich, ja, ich habe die rss specification gelesen.

Vielen Dank im Voraus für jede Hilfe, die hier angeboten wird, werde ich gerne jeden Punkt klären.

Antwort

4

Entsprechend dem Zend Framework Doc müssen Sie den Parameter lastUpdate verwenden, um das letzte Änderungsdatum eines Eintrags festzulegen.

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

So für den Feed veröffentlicht und lastupdate für die Einträge.

+0

danke allterrnativ, ich gebe dies zu gehen. – karim79

+0

Tatsächlich funktionierte es wie ein Zauber. Wie schade, dass ich dieses Detail überspringe. Danke noch einmal! – karim79

Verwandte Themen