Я успешно создал простой канал 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 .
Заранее спасибо за любую помощь, предлагаемую здесь, я буду рад прояснить любой вопрос.