argentum / feed-bundle

Symfony Bundle,用于生成带有自定义命名空间和元素的 RSS Feed

安装次数: 84,728

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 1

开放问题: 0

类型:symfony-bundle

v1.0.0 2014-05-22 21:22 UTC

This package is auto-updated.

Last update: 2024-09-19 19:49:52 UTC


README

SensioLabsInsight Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version License

ArgentumFeedBundle 允许您使用不同的设置创建一组内容 feed。所有预定义设置都可以在运行时覆盖。

您可以通过定义带有标签 argentum_feed.feedargentum_feed.renderer 的服务来创建自己的 Feed 类和渲染器。

使用方法

渲染预定义的 feed

$rss = $this->get('argentum_feed.factory')
    ->createFeed('news')
    ->addFeedableItems($news)
    ->render();

其中 $news 是一组 News 实体。

为了让它工作,您的 News 实体应实现 Feedable 接口

use Argentum\FeedBundle\Feed\Feedable;
use Argentum\FeedBundle\Feed\FeedItem;
use Argentum\FeedBundle\Feed\FeedItemEnclosure;
use Argentum\FeedBundle\Feed\FeedItemSource;

class News implements Feedable
{
    // ...

    /**
     * Returns FeedItem instance.
     *
     * @return FeedItem
     */
    public function getFeedItem()
    {
        $item = new FeedItem();

        $item
            ->setRouteName('news_show')
            ->setRouteParameters([
                'category' => $this->getCategory()->getSlug(),
                'id' => $this->getId(),
                'slug' => $this->getSlug(),
            ])
            ->setTitle($this->getTitle())
            ->setDescription($this->getAnnounce())
            ->setPubDate($this->getPublishedAt())
            ->addCustomValue('yandex:full-text', $this->getBody())
            ->addCustomValue('mailru:full-text', $this->getBody());

        if ($this->getImageMedium()) {
            $item->addEnclosure(
                new FeedItemEnclosure($this->getImageMedium()['path'], 'image/jpeg')
            );
        }

        if ($this->getSourceTitle()) {
            $item->setSource(
                new FeedItemSource($this->getSourceTitle(), $this->getSourceUrl())
            );
        }

        return $item;
    }
}

您还可以在配置中指定数据源提供者

argentum_feed:
    channels:
        news:
            title: 'News'
            link: '/'
            description: 'News feed'
            provider:
                repository: 'ArgentumNewsBundle:News'
                method: 'findAllPublished'
                arguments: [10, 'ru']

然后您只需创建 feed 并渲染它

$rss = $this->get('argentum_feed.factory')
    ->createFeed('news')
    ->render();

配置

完整配置

argentum_feed:
    channels:
        news:
            title: 'News'
            link: '/'
            description: 'News feed'
            language: 'ru'
            copyright: 'ACME'
            managingEditor: 'Editor'
            webMaster: 'Webmaster'
            pubDate: 'now'
            lastBuildDate: 'now'
            categories:
                - { title: 'Category 1', domain: 'domain' }
                - { title: 'Category 2' }
            generator: 'ArgentumFeedBundle'
            docs: 'docs'
            cloud:
                domain: 'domain.tld'
                port: 80
                path: '/'
                registerProcedure: 'register'
                protocol: 'xmlrpc'
            ttl: 300
            image:
                url: '/images/logo.png'
                title: 'News'
                link: '/'
                width: 128
                height: 96
                description: 'News'
            rating: 'Best'
            textInput:
                title: 'Title'
                description: 'Description'
                name: 'name'
                link: 'http://domain.tld'
            skipHours: [0, 1, 2, 3, 4, 5, 6, 7, 8]
            skipDays:
                - 'Saturday'
                - 'Sunday'
            namespaces:
                default: 'http://backend.userland.com/rss2'
                yandex: 'http://news.yandex.ru'
                mailru: 'http://news.mail.ru'
            customElements:
                - 'yandex:full-text'
                - 'mailru:full-text'
            encoding: 'utf-8'
            translationDomain: 'news'
            feed: 'feed'
            renderer: 'rss'
            provider:
                repository: 'ArgentumNewsBundle:News'
                method: 'findAllPublished'
                arguments: [10, 'ru']

最小配置

argentum_feed:
    channels:
        news:
            title: 'News'
            link: '/'
            description: 'News feed'

所有相对链接将使用请求主机转换为绝对链接。所有预定义配置中的文本内容将使用指定的 translationDomain 进行翻译。