Я успешно создал простую 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.
Заранее благодарим за любую помощь, предлагаемую здесь, я буду рад прояснить любую точку.
спасибо allterrnativ, я даю это. – karim79
Действительно, он работал как шарм. Как мне легкомысленно пропустить эту деталь. Еще раз спасибо! – karim79