Как реализовать RSS-канал TYPO3 9.5 для страниц - PullRequest
0 голосов
/ 25 февраля 2020

Я немного исследовал, но не смог найти подходящего решения. проблема довольно проста, нам просто нужно вывести RSS-канал для наших пользовательских страниц блога. у нас есть страница блога, а дочерние страницы являются, так сказать, собственно записями блога - другие периферийные системы требуют такой структуры. Теперь мой вопрос: каков подход TYPO3 для генерации RSS-каналов для каждой из этих дочерних страниц?

любая помощь очень ценится

1 Ответ

1 голос
/ 25 февраля 2020
plugin.tx_seo {
    view {
        templateRootPaths {
            20 = EXT:ds_site/Resources/Private/Templates/Sitemaps/
        }
    }
    config {
        xmlSitemap {
            sitemaps {
                rssFeedAllBlogPosts {
                    provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                    config {
                        table = pages
                        sortField = tstamp
                        lastModifiedField = tstamp
                        additionalWhere = AND (no_index = 0 OR no_follow = 0)
                        pid = 2
                        recursive = 3
                        template = RssFeed
                    }
                }
            }
        }
    }
}

version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Daniel Siepmann - Coding is Art</title>
        <description>List of blog posts at daniel-siepmann.de</description>
        <link>{f:uri.page(pageUid: 1, absolute: 1)}</link>
        <atom:link href="{f:uri.page(pageUid: 1. pageType: 1533906435, additionalParams: {sitemap: 'rssFeedAllBlogPosts'}, absolute: 1)}" rel="self" type="application/rss+xml" />
        <lastBuildDate>{f:format.date(date: 'now', format: 'D, d M Y H:i:s O')}</lastBuildDate>
        <ttl>1800</ttl>

        <f:for each="{items}" as="item">
            <f:if condition="{item.data.doktype} < 200">
                {f:render(section: 'Item', arguments: {
                    item: item.data
                })}
            </f:if>
        </f:for>
    </channel>
</rss>

<f:section name="Item">
    <item>
        <title>{item.title}</title>
        <description>{item.abstract}</description>
        <link>{f:uri.page(pageUid: item.uid, absolute: 1)}</link>
        <pubDate>{f:format.date(date: item.lastUpdated, format: 'D, d M Y H:i:s O')}</pubDate>
        <guid isPermaLink="true">{f:uri.page(pageUid: item.uid, absolute: 1)}</guid>
    </item>
</f:section>

Вы можете использовать его в качестве эталонной реализации. Это то, что я использую для своего сайта. Конечно, вам необходимо настроить его соответствующим образом, например, pid может отличаться, а также ключ расширения ds_site, et c.

Также обратите внимание, что этот использует EXT: seo, расширение системы TYPO3, предоставляющий функции карты сайта.

Вы можете указать ссылку на фид: <a href="{f:uri.page(pageUid: 1, pageType: 1533906435, additionalParams: {sitemap: 'rssFeedAllBlogPosts'})}">RSS Feed</a>.

Также вы можете настроить маршрутизацию URL:

routeEnhancers:
  PageTypeSuffix:
    type: PageType
    default: .html
    map:
      .xml: 1533906435
      .html: 0
  Feed:
    type: Simple
    limitToPages:
      - 1
    routePath: '/feed/{sitemap_id}'
    requirements:
      sitemap_id: '[a-zA-Z].*'
    _arguments:
      sitemap: sitemap_id
...