Я успешно создал простой RSS-канал, но записи продолжают возвращаться как непрочитанные и обновленные, а записи, удаленные из клиента, появляются каждый раз, когда я спрашиваю почту, чтобы обновить фид.
Что я делаю не так?
Я использую эту простую функцию для создания 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» всегда уникальны, и я попытался поэкспериментировать с «опубликованными» и «publishdate» (как необязательными) атрибутами, но получить тот же результат. Вышеприведенный код является упрощенной версией того, что у меня есть, показывая только соответствующие биты, и, наконец, да, я прочитал спецификацию rss .
Заранее спасибо за любую помощь, предлагаемую здесь, я буду рад прояснить любую точку.
Согласно Zend Framework Doc, вы должны использовать параметр lastUpdate для установки последней даты изменения записи.
'entries' => array( array( [...] 'lastUpdate' => 'timestamp of the publication date', // optional [...]
Так опубликовано для фида и lastUpdate для записей.