Jump to content

Documentation

A TYPO3 extension for displaying RSS/Atom feeds with grouping, pagination and background updates.

MPC-RSS Logo

Prerequisites

  • TYPO3 13.x or 14.x
  • PHP 8.2+

Installation

 
composer require mpc/mpc-rss
 

Enable it in the Extension Manager, then run ‘Maintenance > Analyse Database Structure’.

Quick Start

  1. Add a content element: Plugin > MPC RSS Feed
  2. Click on ‘Add feed’ and enter one or more RSS/Atom URLs
  3. Select a grouping mode and save the settings

Feeds are stored as inline records directly within the content element – no separate storage page is required.

Background updates

Feeds are cached on a per-URL basis. This ensures they remain up to date without visitors having to wait:

Scheduler (recommended): System > Scheduler > Add Task > "Update RSS Feeds" – Set the frequency, e.g. to every 30 minutes.

CLI:

 
vendor/bin/typo3 mpcrss:updatefeeds
vendor/bin/typo3 mpcrss:updatefeeds --clear-cache --cache-lifetime=3600
 

For further information and troubleshooting guidance, see ‘Automatic feed updates’.

Architecture

 
Request
  └─ FeedController::listAction()
       ├─ FeedRepository → inline feed records from tt_content
       └─ FeedService::fetchGroupedByCategory()
            ├─ fetchFeedItems()       per-URL HTTP fetch + XML parse + cache
            ├─ deduplicateItems()     link-based dedup across feeds
            ├─ groupItems()           category / source / date / none
            └─ sortAndSliceGroups()   date-desc sort + maxItems limit
 

Key design decisions:

  • Special CType (mpcrss_feed) over PLUGIN_TYPE_CONTENT_ELEMENT, not list_type
  • IRRE inline records – feeds belong to the content element, not to a storage page
  • Isolated cache (mpc_rss) – clearing the page cache has no effect on the feed data
  • External content is sanitised at the caching level (tags, attributes, URL schemas)
  • The service layer is language-neutral; the controller translates generated group names via XLF
  • warmCache() Skips grouping/sorting – efficient for CLI and schedulers

Content Security Policy

Feed elements may refer to external images (entry.image) and to external articles. As the hosts of the feed images are not known in advance, the extension includes a front-end policy (Configuration/ContentSecurityPolicies.php) which img-src extends the https: schema. If you prefer a stricter policy, override this in your website package to allow only the specific hosts from which your feeds serve images, e.g.:

 
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Directive;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Mutation;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationCollection;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationMode;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Scope;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\SourceScheme;
use TYPO3\CMS\Core\Type\Map;

return Map::fromEntries([
    Scope::frontend(),
    new MutationCollection(
        // Restrict to the specific feed image hosts you use rather than a wildcard.
        new Mutation(MutationMode::Extend, Directive::ImgSrc, SourceScheme::https),
    ),
]);
 

The extension never outputs inline scripts or styles, so no script-src / style-src relaxation required.

Documentation

Licence

GPL 2.0 or later

Share page