TYPO3 extension for displaying RSS/Atom feeds with grouping, pagination, and background updates.
- TYPO3 13.x or 14.x
- PHP 8.2+
composer require mpc/mpc-rssActivate in the Extension Manager, then run Maintenance > Analyze Database Structure.
- Add a content element: Plugin > MPC RSS Feed
- Click Add Feed and enter one or more RSS/Atom URLs
- Choose a grouping mode and save
Feeds are stored as inline records directly on the content element -- no storage page needed.
Feeds are cached per URL. To keep them fresh without making visitors wait:
Scheduler (recommended):
System > Scheduler > Add Task > "Update RSS Feeds" -- set frequency to e.g. every 30 minutes.
CLI:
vendor/bin/typo3 mpcrss:updatefeeds
vendor/bin/typo3 mpcrss:updatefeeds --clear-cache --cache-lifetime=3600See Automatic Feed Updates for details and troubleshooting.
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:
- Dedicated CType (
mpcrss_feed) viaPLUGIN_TYPE_CONTENT_ELEMENT, not list_type - IRRE inline records -- feeds belong to the content element, not a storage page
- Isolated cache (
mpc_rss) -- clearing page cache doesn't affect feed data - External content is sanitized at the caching layer (tags, attributes, URL schemes)
- Service layer is language-neutral; the controller translates generated group labels via XLF
warmCache()skips grouping/sorting -- efficient for CLI and Scheduler
Feed items can reference remote images (entry.image) and link out to external
articles. Because feed image hosts are not known in advance, the extension ships a
frontend policy (Configuration/ContentSecurityPolicies.php) that extends img-src
with the https: scheme. If you prefer a tighter policy, override it in your site
package to allow only the specific hosts your feeds serve images from, 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 emits inline scripts or styles, so no script-src / style-src
relaxation is required.
- Automatic Feed Updates -- Scheduler and CLI setup
- Grouping Modes -- Category, source, date, or timeline
- Custom Templates -- Override templates and available variables
- Routing -- SEO-friendly URLs
GPL-2.0-or-later