2011-02-24 3 views
3

바라기를 이것은 지식이있는 사람에게는 빠른 것이지만 Zend 프레임 워크 프로젝트에서 RSS 피드에 대한 올바른 날짜/시간 형식을 얻으려고 문제를 겪고 있으며 사용 가능한 모든 리소스를 공개했습니다. php datetime 내가 완전히 이해할 수없는 유일한 리소스는 젠드 문서이다. Impl는 정확하게 정적 클래스를 호출하는 방법도 정확하게 알려지지 않았다. Zend Date_time. 또한 DB 필드는 datetime 형식입니다 ...젠드 RSS 피드 pubDate 시간 형식화

XML 형식으로 pubDate를 제외하고 피드에 모든 데이터를 가져 오는 것이 좋습니다. 형식이 올바르게 인식되지 않아 피드가 각 게시물의 현재 날짜를 뱉어 버리고 있습니다. Heres까지 내가 가지고있어 ...

public function rssAction() 
{ 

    $this->_helper->layout->setLayout('xmllayout'); 

    $model = new Default_Model_News; 
$newsitems = $model->fetchAll(); 
    $date = date("D\, j M Y G:i:s"); 

    $feedArray = array (
      'title'   => "Postgoldforcash News Feed", 
      'description'  => "Postgoldforcash News Feed", 
      'link'    => "http://www.postgoldforcash.com", 
      'language'   => 'en-EN', 
      'charset'   => 'utf-8', 
      'docs'    => "Postgoldforcash News", 
      'pubDate'   =>  $date, 
      'entries'   => array() 
     ); 

    foreach ($newsitems as $article) { 
    $fDate = date_format(new DateTime($article->publishDate), "r"); 
     $feedArray['entries'][] = array (
        'title'   => $article->title, 
        'link'   => $article->url."/", // for some reason i have to add a blank space or '/' in otherwise it breaks... 
        'guid'   => $article->title, 
        'description'  => $article->content, 
        'pubDate'   => $fDate 
      );  
    } 
    $feed = Zend_Feed::importArray($feedArray, 'rss'); 
    $feed->send(); 
} 

나는 올바른 형식을 포함하는 모든 다른 방법을 시도했다;

date_format(new DateTime($article->publishDate), "D\, j M Y G:i:s"); 


strftime ($article->publishDate, "%a, %d %b %Y %H:%M:%S %z") ; 


gmdate(DATE_RSS, strtotime($article->publishDate)); 

모든 포인터가 좋을 것입니다!

+0

'$ article-> publishDate'의 정확한 형식은 무엇입니까? – Vika

+0

mysql의 시간대 필드 예 : 2009-10-15 00:00:00 – sinewave

답변

4

pubDate의 또는 게시가 선택 필드입니다 그 필요하지 않습니다. 그래서 나는 그것을 논평 할 것이다.

'lastUpdate'=> strtotime ($ article-> publishDate)을 $ feedArray에 추가합니다. Zend RSS 컴파일러는이를 포맷하기 위해 gmdate를 수행합니다.

그리고 import array를 사용하는 대신 importBuilder를 사용하십시오.

자세한 내용은 http://framework.zend.com/manual/en/zend.feed.importing.html을 참조하십시오.

그것 또한 단지

(10 수행이 경우 필자의) 최신 피드를 표시하는 가장 좋은 방법은 그래서 코드를 읽어야합니다

public function rssAction() { 

    $this->_helper->layout->setLayout('xmllayout'); 

    $model = new Default_Model_News; 
    $newsitems = $model->fetchAll(); 
    $date = date("YYYY-MM-dd HH:mm:ss"); 

    $feedArray = array(
     'title' => "Postgoldforcash News Feed", 
     'description' => "Postgoldforcash News Feed", 
     'link' => "http://www.postgoldforcash.com", 
     'language' => 'en-EN', 
     'charset' => 'utf-8', 
     'docs' => "Postgoldforcash News", 
     'generator' => 'Zend Framework Zend_Feed', 
     'entries' => array() 
    ); 

    $i = 0; 
    foreach ($newsitems as $article) { 
     $i++; 
     if ($i > 10) 
      break; 
     $feedArray['entries'][] = array(
      'title' => html_entity_decode($article->title), 
      'link' => $article->url ."/", 
      'guid' => $article->url, 
      'description' => strip_tags($article->content), 
      'lastUpdate' => strtotime($article->publishDate) 

     ); 
    } 
    $feed = Zend_Feed::importBuilder(new Zend_Feed_Builder($feedArray), 'rss'); 
    $feed->send(); 
} 

갈 줄.

+1

아, 예, 대우를받습니다! 우리가 피드를 내보낼지라도 importBuilder 함수에 대해 다소 혼란 스러웠습니다. 그러나 이제는 뒤늦게 우리가 배열을 Zend_Feed 메소드 ... 그래, 정말 고마워, 지금은 며칠 동안 나를 짜증나게했다! – sinewave

1

RFC_2822 형식으로 날짜를 출력해야합니다. 이 시도 :

$fDate = new Zend_Date(); 
foreach ($newsitems as $article) { 
    $date->set($article->publishDate, 'YYYY-MM-dd HH:mm:ss'); 
    $feedArray['entries'][] = array (
     'title'   => $article->title, 
     'link'   => $article->url."/", // for some reason i have to add a blank space or '/' in otherwise it breaks... 
     'guid'   => $article->title, 
     'description' => $article->content, 
     'pubDate'  => $date->get(Zend_Date::RFC_2822) 
    );  
} 
+0

아, 알지만, 불행하게도 내가 로케일을 설정하지 않는다고 말합니다. 메시지 : 주어진 로케일()이 존재하지 않습니다. 그래서 추가하려고합니다. this $ date = new Zend_Locale ('en_GB'); 그리고 다시 넘어집니다 :-( – sinewave