
Installation
composer require mpc/mpc-rss
Enable it in the Extension Manager, then run ‘Maintenance > Analyse Database Structure’.
Quick Start
- Add a content element: Plugin > MPC RSS Feed
- Click on ‘Add feed’ and enter one or more RSS/Atom URLs
- 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) overPLUGIN_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
- Automatic feed updates – setting up the scheduler and CLI
- Grouping modes – category, source, date or timeline
- Custom templates – Overriding templates and available variables
- Redirects – SEO-friendly URLs