2009-03-18 2 views
4

Я успешно создал простую RSS-ленту, но записи продолжают возвращаться как непрочитанные и обновленные, а записи, удаленные из клиента, появляются каждый раз, когда я прошу почту обновлять фид.Как правильно создать Zend Feed?

Что я делаю неправильно?

Я использую эту простую функцию, чтобы создать канал 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

Я использую rss-клиент mac mail для проверки. Загрузка загрузок просто прекрасна, показывая все 5 элементов, которые у меня есть в базе данных для целей тестирования. Проблемы заключаются в следующем:

1) Если я отмечаю один или несколько элементов как «прочитанные», а затем сообщаю почту для обновления фида, он снова вытаскивает все элементы, как если бы я никогда не загружал их в первую очередь.

2) Если я удалю один или несколько элементов, они снова возвращаются, непрочитанные, как если бы я впервые подписался на канал.

3) Каналы всегда отмечены как обновлено. Это должно быть так?

Является ли это чем-то связанным с параметрами, которые я устанавливаю, я что-то пропускаю, или это решение может быть чем-то более тонким, как настройка заголовков HTTP-контента (например, «304 Not Modified»)?

Мое понимание rss заключается в том, что после того, как элемент был отмечен как прочитанный или удаленный от клиента, он никогда не должен возвращаться, что является поведением, которым я подвергаюсь.

Просто обратите внимание, что параметры 'link' и 'guid' всегда уникальны, и я попытался поэкспериментировать с атрибутами 'publish' и 'publishdate' (оба дополнительных), которые получают только тот же результат. Вышеприведенный код является упрощенной версией того, что у меня есть, показывая только соответствующие биты, и, наконец, да, я прочитал rss specification.

Заранее благодарим за любую помощь, предлагаемую здесь, я буду рад прояснить любую точку.

ответ

4

В соответствии с документом Zend Framework Doc вы должны использовать параметр lastUpdate , чтобы установить дату последней модификации записи.

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

Так опубликовал для подачи и lastUpdate для записей.

+0

спасибо allterrnativ, я даю это. – karim79

+0

Действительно, он работал как шарм. Как мне легкомысленно пропустить эту деталь. Еще раз спасибо! – karim79

Смежные вопросы