Something for vinyl fans! In addition to records (vinyl) and CDs, Discogs accepts virtually any physical audio medium that has ever been commercially or officially produced for the public.
Display your Discogs collection with cover images, tracklists, credits and community ratings on your TYPO3 website.
Note
See it in action: t3sbootstrap.de/extensions/discogs-collection
- TYPO3 >= 14.3
- PHP >= 8.2
- A Discogs account with a personal API token
composer require t3s/t3s-discogsInstall via the TYPO3 Extension Manager:
Or download directly from extensions.typo3.org/extension/t3s_discogs
- Log in to discogs.com
- Go to Settings → Developers
- Click "Generate new token"
- Copy the token and keep it private
Direct link: https://www.discogs.com/settings/developers
- Open a page in the backend
- Insert a new content element of type "Discogs Collection"
- In the "Plugin" tab, fill in:
- Discogs Username (as shown in your profile URL)
- Discogs User Token (from step 1)
- Configure columns, sorting and other options as desired
The templates require Bootstrap 5.3.
| Setting | Description | Default |
|---|---|---|
username |
Your Discogs username | – |
token |
Personal API token | – |
perPage |
Items per page (12 / 24 / 48 / 100) | 24 |
columns |
Bootstrap grid columns (2 / 3 / 4 / 6) | 4 |
sort |
Sort field (added / artist / title / year / format) | added |
sortOrder |
Sort direction (asc / desc) | desc |
viewMode |
Display as grid or list | grid |
disableCache |
Fetch fresh data on every request | no |
- Responsive Bootstrap 5 grid or table list view (switchable via plugin settings)
- Cover image, artist, title, year, format, primary genre
- Every cover and title links to the detail view
- Page-based pagination with readable URLs (e.g.
/my-collection/page/2)
- Large cover image + all additional release images as thumbnails
- Community rating (average score, number of ratings, have/want counts)
- Full metadata: year, release date, country, label, catalogue number
- Format with all descriptions (e.g.
Vinyl (12", 33⅓ RPM, LP)) - Genres & styles as badges
- Credits: producers, mixers, guest artists with their roles
- Tracklist as a table (position, title, track artists, duration)
- Videos as YouTube links with duration
- Free-text notes from the Discogs database
- Data quality indicator
API responses are cached via the TYPO3 caching framework (FileBackend, cache group pages):
- Collection lists are cached for 1 hour
- Release details are cached for 24 hours, since master data rarely changes
To force a refresh, flush the TYPO3 page cache. Caching can be disabled per plugin instance via the disableCache FlexForm setting.
Authenticated requests are limited to 60 per minute. With caching enabled, normal usage stays well within this limit.
To get clean readable URLs for the detail view and pagination, add the following to your site's config/sites/<your-site>/config.yaml:
routeEnhancers:
T3sDiscogsShow:
type: Extbase
limitToPages:
- 12 # UID of the page with the plugin
extension: T3sDiscogs
plugin: Collection
routes:
- { routePath: '/release/{releaseId}', _controller: 'Discogs::show', _arguments: {'releaseId': 'releaseId'} }
- { routePath: '/page/{page}', _controller: 'Discogs::list', _arguments: {'page': 'page'} }
defaultController: 'Discogs::list'This produces URLs like:
/my-collection/release/2548209
/my-collection/page/2
Add the following to config/system/additional.php to prevent TYPO3 from appending a cHash parameter to these URLs:
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_t3sdiscogs_collection[releaseId]';
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_t3sdiscogs_collection[action]';
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_t3sdiscogs_collection[controller]';
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_t3sdiscogs_collection[page]';Set custom template paths via TypoScript:
plugin.tx_t3sdiscogs_collection {
view {
templateRootPaths {
10 = EXT:my_sitepackage/Resources/Private/Templates/
}
partialRootPaths {
10 = EXT:my_sitepackage/Resources/Private/Partials/
}
layoutRootPaths {
10 = EXT:my_sitepackage/Resources/Private/Layouts/
}
}
}