Zend RSS подача pubDate форматирование времени - PullRequest
3 голосов
/ 24 февраля 2011

Надеюсь, это быстро для тех, кто в курсе, но у меня возникла проблема с попыткой получить правильный формат даты и времени для RSS-канала в проекте Zend Framework и выделены все доступные ресурсы; php datetime Единственный ресурс, который я не могу полностью понять, это документация Zend, так как я не совсем уверен, как правильно вызывать статический класс, к которому они относятся тоже Zend Date_time . Также поле БД имеет тип datetime ...

Я получил все свои данные в ленте, за исключением публикации pubDate в формате XML. Поскольку формат не распознается правильно, лента просто выдает текущую дату для каждого сообщения. Вот насколько я получил ...

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));

Любые указатели были бы великолепны!

Ответы [ 2 ]

4 голосов
/ 01 марта 2011

pubDate или опубликованное является необязательным полем и не требуется.Поэтому я бы прокомментировал это.

Я бы добавил 'lastUpdate' => strtotime ($ article-> publishDate) в $ feedArray.Обратите внимание, что компилятор Zend RSS затем сделает gmdate для его форматирования.

И вместо использования массива импорта используйте 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 голос
/ 26 февраля 2011

Вам необходимо вывести дату в формате 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)
    );       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...