
Installation
composer require mpc/mpc-vidply
Anschließend:
- Datenbankaktualisierung → Admin-Tools → Wartung → Datenbankstruktur analysieren
- Site-Set einbinden → Site-Verwaltung → Sites → Ihre Site → Sets → Hinzufügen
mpc/mpc-vidply - Caches leeren
Voraussetzungen: Nur TYPO3-Core, Fluid und Extbase — fluid_styled_content ist nicht erforderlich. Die Erweiterung verfügt über einen eigenen lib.mpcVidplyContentElement Renderer und ein Standard-Layout (Frame-Wrapper + tt_content Kopfzeile/Unterkopfzeile).
Optionale Anpassung: Wenn Ihr Site-Paket oder fluid_styled_content benutzerdefinierte Frame-/Header-Partials enthält, können Sie VidPly darauf verweisen:
lib.mpcVidplyContentElement.layoutRootPaths.10 = {$styles.templates.layoutRootPath}
lib.mpcVidplyContentElement.partialRootPaths.10 = {$styles.templates.partialRootPath}
Verzeichnisstruktur
mpc_vidply/
├── Classes/
│ ├── Backend/
│ │ ├── Controller/ # MediaImportAjaxController (URL import)
│ │ ├── Form/Element/ # MediaUrlImportElement
│ │ └── Preview/ # VidPlyPreviewRenderer
│ ├── Form/FormDataProvider/ # MediaUrlImportFormDataProvider
│ ├── Service/ # MediaFromUrlService, MediaUrlNormalizer
│ └── DataProcessing/ # VidPly, Listview, Detail processors
├── Configuration/
│ ├── Sets/mpc-vidply/ # Site Set (TYPO3 13.4+)
│ ├── TCA/
│ │ ├── tx_mpcvidply_media.php # Media record TCA
│ │ └── Overrides/
│ │ └── tt_content.php # Content element TCA
│ ├── TypoScript/
│ │ └── Helper/ContentElement.typoscript # lib.mpcVidplyContentElement
│ ├── ContentSecurityPolicies.php
│ ├── Icons.php
│ ├── JavaScriptModules.php
│ └── Services.yaml
├── Resources/
│ ├── Private/
│ │ ├── Language/ # XLF translations (en, de)
│ │ ├── Partials/VidPly/ # Modular template partials
│ │ ├── Layouts/ # Default content element layout
│ │ └── Templates/ # Main VidPly.html template
│ └── Public/
│ ├── Css/vidply.min.css
│ ├── Icons/
│ └── JavaScript/
│ ├── hls.min.js # HLS streaming (loaded only when needed)
│ ├── dash.all.min.js # DASH streaming (loaded only when needed)
│ ├── PlaylistInit.js # Playlist logic
│ ├── PrivacyLayer.js # GDPR consent (YouTube/Vimeo/SoundCloud)
│ └── vidply/ # Core player (compiled from TypeScript, ESM, code-split)
└── Documentation/
├── README.md # Documentation index (start here)
├── AssetLoading.md
├── Editors-Guide.md
├── HLS-Implementation.md
├── Integrations.md # Vue/Swiper, CSP, mp-core JSON-LD
├── Listview.md
├── Partials.md
├── PrivacyLayer.md
└── SettingsArchitecture.md
Website-Set
Aktivieren in config/sites/<site>/config.yaml:
dependencies:
- mpc/mpc-vidply
Oder über das Backend: Website-Verwaltung → Websites → Sets → VidPly hinzufügen.
Datenbanktabellen
tx_mpcvidply_media
Einträge in der Medienbibliothek mit folgenden Typen: video, audio, youtube, vimeo, soundcloud
Schlüsselspalten:
| Spalte | Typ | Beschreibung |
|---|---|---|
media_type | Zeichenkette | Typbezeichner |
media_file | Datei | Dateiverweise (Video/Audio, HLS/DASH, YouTube/Vimeo/SoundCloud über FAL-Online-Medien-Helfer) |
title | Zeichenkette | Anzeigetitel |
artist | Zeichenkette | Name des Urhebers |
poster | Datei | Miniaturbild |
captions | Datei | WebVTT-/SubRip-Untertiteldateien (SRT wird beim Speichern automatisch in VTT konvertiert) |
chapters | Datei | WebVTT-/SubRip-Kapitel-Dateien (SRT wird beim Speichern automatisch in VTT konvertiert) |
audio_description | Datei | Beschriebenes Video (MP4/WebM) für den Quelltausch |
audio_description_mode | auswählen | auto, swapoder vtt_speech — siehe Audiobeschreibungsmodi weiter unten |
audio_description_duration | int | Dauer der beschrifteten Version in Sekunden (Wiedergabelisten-Benutzeroberfläche) |
sign_language | Datei | Gebärdensprache-Einblendung |
enable_transcript | bool | Transkript-Fenster anzeigen |
Audiodeskription – Zuordnung der Player-Optionen
VidPlyProcessor Ordnet Medienfelder VidPly zu data-vidply-options:
| Medienfeld | Player-Option |
|---|---|
audio_description (erste Datei) | audioDescriptionSrc |
audio_description_mode | audioDescriptionMode (auto | swap | vtt_speech) |
audio_description_duration | audioDescriptionDuration |
Untertitel mit tx_track_kind = descriptions | <track kind="descriptions"> |
Fallback-Hierarchie, wenn audioDescriptionMode ist auto:
- Beschreibung des Video-Wechsels, wenn
audio_descriptioneingestellt ist - Andernfalls VTT-Sprache, falls eine VTT-Spur mit Untertiteln vorhanden ist
- Andernfalls wird die AD-Schaltfläche ausgeblendet (keine gesprochene AD)
Die AD-Schaltfläche ist aktiviert, wenn entweder ein beschriftetes Video oder eine VTT-Spur mit Beschreibungen vorhanden ist.
SRT → WebVTT-Konvertierung
Für die Wiedergabe und Transkripte von VidPly ist WebVTT erforderlich. Die Erweiterung akzeptiert SubRip-Uploads (.srt) für Untertitel, Kapitel und alternative Audiodeskriptionsspuren (tx_desc_src_file).
| Auslöser | Verhalten |
|---|---|
Speichern tx_mpcvidply_media im Backend | Verknüpfte .srt Dateien werden an Ort und Stelle in .vtt; Editoren erhalten eine Blinkmeldung |
| Upgrade-Assistent (ohne Shell) | Admin-Tools → Upgrade → Upgrade-Assistenten → VidPly: SRT-Untertiteldateien in WebVTT konvertieren |
| CLI (optional, DDEV/CI) | vendor/bin/typo3 mpc-vidply:convert-srt-to-vtt [--dry-run] [--limit=N] |
Implementierung: SrtToVttConverter, SrtCaptionMigrationService, SrtCaptionConversionHook, ConvertSrtCaptionsUpgradeWizard.
tx_mpcvidply_content_media_mm
MM-Beziehung zwischen tt_content und tx_mpcvidply_media.
tx_mpcvidply_privacy_settings
Siteweite Konfiguration der Datenschutzebene für externe Dienste (YouTube, Vimeo, SoundCloud).
Schlüsselspalten:
| Spalte | Typ | Beschreibung |
|---|---|---|
youtube_headline | varchar(255) | Optionale Überschrift |
youtube_intro_text | text | Einleitungstext vor dem Link |
youtube_outro_text | text | Abschlusstext nach dem Link |
youtube_policy_link | varchar(255) | URL der Datenschutzerklärung |
youtube_link_text | varchar(255) | Linktext |
youtube_button_label | varchar(255) | Schaltfläche „aria-label“ |
vimeo_* | (gleiche Felder) | Vimeo-Einstellungen |
soundcloud_* | (gleiche Felder) | SoundCloud-Einstellungen |
sys_language_uid | int | Sprach-ID (mehrsprachig) |
Erweiterungskonfiguration
Globale UI- und Sicherheitsstandards: Admin → Einstellungen → Erweiterungskonfiguration → mpc_vidply (ext_conf_template.txt).
| Einstellung | Zweck |
|---|---|
allowedVideoDomains / allowedAudioDomains | Whitelist für externe MP4-/WebM-URLs |
playIcon / playPosition / allowedPlayIconDomains | Benutzerdefiniertes Symbol für Datenschutz-/Wiedergabe-Overlay |
useCssIcons | CSS-basierte Symbole in der Steuerleiste |
theme / themeSyncEnabled | Synchronisierung von dunklem/hellen Player- und Seiten-Design |
Vollständige Referenz: SettingsArchitecture.md → Erweiterungskonfiguration.
Dynamische Inhalte und Integrationen
Vue, Swiper, CSP, mp-core JSON-LD-Zusammenführung, Theme-API: Integrationen.
Schnell-API nach PlaylistInit.js dem Laden:
window.VidPlyInit.scan(rootElement);
window.VidPlyInit.pauseOutside(activeSlide);
document.dispatchEvent(new CustomEvent('mpc:dynamic-content:ready', { detail: { root } }));
Inhaltselement
CType: mpc_vidply
TCA-Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
tx_mpcvidply_media_items | Gruppe | Auswahl von Mediendatensätzen (MM) |
tx_mpcvidply_options | Check | Bitmasken-Optionen |
tx_mpcvidply_volume | dezimal | Standardlautstärke (0–1) |
tx_mpcvidply_playback_speed | dezimal | Standardgeschwindigkeit (0,25–2,0) |
tx_mpcvidply_language | Auswahl | UI-Sprache erzwingen |
Optionen-Bitmaske
const AUTOPLAY = 1; // Auto-start playback
const LOOP = 2; // Loop content
const MUTED = 4; // Start muted
const CONTROLS = 8; // Show controls
const CAPTIONS_DEFAULT = 16; // Captions on by default
const KEYBOARD = 64; // Enable keyboard shortcuts
const AUTO_ADVANCE = 256; // Auto-play next in playlist
// Default: 328 = CONTROLS + KEYBOARD + AUTO_ADVANCE
Hinweise:
- Die adaptive Größenanpassung ist immer aktiviert (kein Umschaltknopf).
- Die Transkription wird pro Mediendatensatz gesteuert (
tx_mpcvidply_media.enable_transcript).
Option in „Fluid“ aktivieren:
<f:if condition="{data.tx_mpcvidply_options} % 16 >= 8">
<!-- Controls enabled -->
</f:if>
Datenverarbeitung
VidPlyProcessor
Verarbeitet Medienelemente für die Frontend-Darstellung.
TypoScript:
tt_content.mpc_vidply =< lib.mpcVidplyContentElement
tt_content.mpc_vidply {
templateName = VidPly
dataProcessing {
10 = Mpc\MpcVidply\DataProcessing\VidPlyProcessor
}
}
Verfügbar in der Vorlage:
{mediaItems} <!-- Array of processed media -->
{isPlaylist} <!-- true if 2+ items -->
{hasLocalMedia} <!-- Has video/audio (including HLS/DASH sources) -->
{hasExternalService} <!-- Has YouTube/Vimeo/SoundCloud -->
{playerOptions} <!-- Decoded options array -->
{privacySettings} <!-- Privacy layer settings per service -->
Listenansicht & Detailansicht (CE im Mediathek-Stil)
ListviewProcessor—mpc_vidply_listview; erstelltlistview.rowsmit Karten, Paginierungsflags, Sortiervorgaben usw. SieheDocumentation/Listview.md(Routing, i18n, Editorfelder).DetailProcessor—mpc_vidply_detail; erstelltdetail.*und Player- Daten für die Detailseite. Vorlage:Detail.html+ListviewCSS, wenn gemeinsam genutzt. Das zugehörige Regal wird nur geladen, wenntt_content.tx_mpcvidply_show_relatedaktiviert ist (Standard1); bei Deaktivierungdetail.relatedist es leer.
Vorlagen / Teilvorlagen: Templates/Listview.html, Partials/Listview/*.
Vorlagenstruktur
Hauptvorlage
Resources/Private/Templates/VidPly.html
Partials
| Partial | Zweck |
|---|---|
VidPly/Assets.html | Bedingte Registrierung von Assets |
VidPly/VideoSources.html | <source> Elemente für Video |
VidPly/AudioSources.html | <source> Elemente für Audio |
VidPly/Tracks.html | Untertitel/Kapitel <track> Elemente |
VidPly/MetadataScripts.html | JSON-LD-Metadaten zur Barrierefreiheit |
VidPly/PrivacyLayer.html | DSGVO-Einwilligungs-Overlay |
Anpassung
Vorlagen in Ihrem Sitepackage überschreiben:
tt_content.mpc_vidply {
templateRootPaths.20 = EXT:my_sitepackage/Resources/Private/Templates/
partialRootPaths.20 = EXT:my_sitepackage/Resources/Private/Partials/
}
JavaScript-Architektur
Bedingtes Laden
VidPly lädt nur das JavaScript, das für die aktuellen Medientypen benötigt wird:
| Szenario | Geladene Assets | Größe |
|---|---|---|
| Nur YouTube/Vimeo/SoundCloud | PrivacyLayer.js | ~5 KB |
| Lokale Video-/Audiodateien | vidply/vidply.esm.min.js (+ Chunks) + PlaylistInit.js | ~180 KB |
| HLS-Streaming | + hls.min.js | +60 KB |
| DASH-Streaming | + dash.all.min.js | +200 KB |
| Wiedergabeliste (2+ Elemente) | + PlaylistInit.js | +5 KB |
Bis zu 97 % Reduzierung bei ausschließlich externen Inhalten.
Dateien
| Datei | Zweck |
|---|---|
PrivacyLayer.js | DSGVO-Einwilligung für externe Dienste (YouTube / Vimeo / SoundCloud) |
PlaylistInit.js | Benutzeroberfläche und Navigation für Wiedergabelisten |
hls.min.js | hls.js 1.6.16 für adaptives HLS-Streaming (Chrome / Firefox / Edge / Desktop-Safari) |
dash.all.min.js | dash.js 5.2.0 (modernes UMD) für MPEG-DASH-Streaming |
vidply/*.js | Kern-Player (kompiliertes TypeScript → ESM, Code-Split, enthält SoundCloud-Renderer + Puffer-Spinner + optionalen Download-Button) |
Initialisierung des Players
// This is roughly what `PlaylistInit.js` does internally:
import { Player, PlaylistManager } from './vidply/vidply.esm.min.js';
const player = new Player('#my-player', {
controls: true,
keyboard: true,
responsive: true,
});
// Optional: attach a playlist
const playlist = new PlaylistManager(player, { autoAdvance: true });
Datenschutzebene
Implementierung
Externe Dienste (YouTube, Vimeo, SoundCloud) zeigen ein Einwilligungs-Overlay an:
PrivacySettingsServiceRuft Einstellungen ab vontx_mpcvidply_privacy_settingsTabelle- Die Vorlage rendert das Poster und die Wiedergabetaste (kein Iframe) mit den Einstellungen aus der Datenbank
PrivacyLayer.js/PlaylistInit.jsverarbeitet den Klick- Bei Einwilligung: Erstellt Iframe, lädt den Player des Dienstes
- Kein Tracking, bis der Nutzer explizit auf „Wiedergabe“ klickt
Datenschutzeinstellungen-Dienst
Classes/Service/PrivacySettingsService.php bietet:
$privacySettings = $privacySettingsService->getSettingsForService('youtube', $languageId);
// Returns: ['headline', 'intro_text', 'outro_text', 'policy_link', 'link_text', 'button_label']
Die Einstellungen greifen auf Übersetzungen aus der Sprachdatei zurück, wenn die Datenbankfelder leer sind.
Datenschutzerklärung anpassen
Empfohlen: Über das Backend konfigurieren (Listenmodul → Einstellungen für die Datenschutzebene)
Oder Vorlage überschreiben: Partials/VidPly/PrivacyLayer.html
<div class="vidply-privacy-layer"
data-service="{service}"
data-embed-url="{embedUrl}">
<f:if condition="{privacySettings.headline}">
<h3>{privacySettings.headline}</h3>
</f:if>
<img src="{poster}" alt="{title}" />
<button class="vidply-privacy-play">
{privacySettings.button_label}
</button>
<p class="vidply-privacy-notice">
{privacySettings.intro_text}
<a href="{privacySettings.policy_link}">{privacySettings.link_text}</a>
{privacySettings.outro_text}
</p>
</div>
HLS- und DASH-Streaming
HLS und DASH sind keine separaten Medientypen. Streaming-Quellen (.m3u8 / .mpd) werden als Dateien innerhalb des Medientyps „Video“ oder „Audio“ zusammen mit progressiven Fallbacks hinzugefügt.
So funktioniert es
HLS:
- Erkennt
.m3u8Quelle in Medien-Dateiverweisen (nach MIME-Typ oder Dateiendung) - Bindet
hls.min.js(nur bei Bedarf) – das VidPly-Bundle nutzt es in Chrome, Firefox, Edge und der Desktop-Version von Safari, um die volle Funktionsparität zu gewährleisten - In Safari unter iOS / iPadOS (wo MSE nicht verfügbar ist) greift VidPly automatisch auf natives HLS zurück und bindet die
TextTrackAPI in die VidPly-Menüs für Untertitel, Transkripte und Qualität ein – es ist kein separater Codepfad erforderlich - Bietet eine Benutzeroberfläche zum Wechseln der Qualität
- Eingebettete Untertitel aus dem HLS-Manifest werden standardmäßig verwendet; lokale VTT-Dateien haben Vorrang
- Der HLS-Renderer reagiert zudem auf
Hls.Events.SUBTITLE_FRAG_PROCESSED, sodass das interaktive Transkript synchron bleibt, wenn neue Untertitel-Fragmente für lange bzw. Live-Streams geladen werden
DASH:
- Erkennt
.mpdQuelle in Medien-Dateiverweisen (nach MIME-Typ oder Dateiendung) - Bezieht
dash.all.min.js(nur bei Bedarf) - Initialisiert dash.js für Video-/Audio-Elemente
- Bietet Unterstützung für adaptive Qualität sowie TTML- und WebVTT-Untertitel
- Standardmäßig werden eingebettete Untertitel aus dem DASH-Manifest verwendet; lokale VTT-Dateien haben Vorrang
Priorität der Quellen: DASH → HLS → progressiv (MP4/WebM/MP3/OGG)
CSP-Konfiguration
Configuration/ContentSecurityPolicies.php Fügt Streaming-Domains und die von diesen verwendeten Schemata zur Whitelist hinzu hls.js / dash.js.
Benutzerdefinierte Domänen hinzufügen:
return [
'default-src' => ["'self'"],
'media-src' => ["'self'", 'blob:', 'data:', 'https://your-cdn.com'],
'connect-src' => ["'self'", 'https://your-cdn.com'],
];
blob:ist erforderlich, dahls.js/dash.jseinblob:URL während<video>.srcwährend der Wiedergabe festlegen.data:ist erforderlich, da einige HLS-Varianten Init-Segmente / Untertitel inline als Daten-URIs einbetten.
Erweiterung von VidPly
Benutzerdefinierten Medientyp hinzufügen
- TCA erweitern (
Configuration/TCA/Overrides/tx_mpcvidply_media.php):
$GLOBALS['TCA']['tx_mpcvidply_media']['columns']['media_type']['config']['items'][] = [
'label' => 'My Service',
'value' => 'myservice',
];
$GLOBALS['TCA']['tx_mpcvidply_media']['types']['myservice'] = [
'showitem' => '...',
];
Aktualisieren Sie den DataProcessor, um den neuen Typ zu verarbeiten
Erstellen eines Partials für die Darstellung
Benutzerdefinierte Player-Optionen
Hinzufügen zu tt_content.php:
$GLOBALS['TCA']['tt_content']['columns']['tx_mpcvidply_options']['config']['items'][] = [
'label' => 'My Option',
'value' => 512, // Next power of 2
];
Debugging
Häufige Probleme
| Problem | Lösung |
|---|---|
| Medien werden nicht angezeigt | Überprüfen Sie, tx_mpcvidply_media , ob der Eintrag nicht ausgeblendet ist |
| MM-Beziehung unterbrochen | Prüfen tx_mpcvidply_content_media_mm Tabelle |
| JS wird nicht geladen | Browser-Konsole überprüfen; TypoScript überprüfen |
| HLS funktioniert nicht | CORS-Header in der .m3u8-Datei überprüfen; sicherstellen, dass sich die Quelldatei im Medien-Record befindet |
| DASH funktioniert nicht | Überprüfen Sie die CORS-Header in der .mpd-Datei; stellen Sie sicher, dass die Quelldatei im Media Record enthalten ist; stellen Sie sicher, dass dash.js geladen wird |
| Privacy Layer hängt | Caches leeren; „PrivacyLayer.js“ überprüfen |
Nützliche Abfragen
-- Check media records
SELECT uid, title, media_type, hidden FROM tx_mpcvidply_media;
-- Check MM relations
SELECT * FROM tx_mpcvidply_content_media_mm WHERE uid_local = [tt_content.uid];
-- Check file references
SELECT * FROM sys_file_reference WHERE tablenames = 'tx_mpcvidply_media';
Debug-Modus
Aktivieren Sie den TYPO3-Debug-Modus, um detaillierte Fehler anzuzeigen:
$GLOBALS['TYPO3_CONF_VARS']['BE']['debug'] = true;
$GLOBALS['TYPO3_CONF_VARS']['FE']['debug'] = true;
Strukturierte Daten (JSON-LD)
VidPly generiert schema.org strukturierte Daten für seine Medien aus, sodass Seiten für
Google-Rich-Results für Video/Audio in Frage kommen. Die Ausgabe wird in der Seite <head>, nicht in
der Vorlage für das „content“-Element.
Was ausgegeben wird
- Detailansichten und Einzelmedienseiten: ein
VideoObject(oderAudioObjectfüraudio/soundcloud). - Galerieseiten mit mehreren unterschiedlichen Medien: ein
ItemListder eingebettetenVideoObject/AudioObjectKnoten. Inline-mpc_vidplyPlayer (einschließlich Wiedergabelisten) undmpc_vidply_listviewRegale werden beide berücksichtigt und anhand ihrer Medien-UID in der Standardsprache dedupliziert. - Felder aus dem Mediendatensatz:
name,description,duration(ISO 8601),thumbnailUrl,uploadDate, sowiecontentUrl/embedUrlje nach Medientyp aufgelöst.
- Detailansichten und Einzelmedienseiten: ein
contentUrlund adaptives Streaming: HLS/DASH-Manifeste sind keine progressiven Dateien, daher wirdcontentUrlfür reine HLS-/DASH-Quellen ausgegeben (derembedUrlverweist weiterhin auf die Wiedergabeseite). Progressive MP4-/WebM-/MP3-/OGG-Quellen werden verwendet, sofern verfügbar.Auflösung der Wiedergabe-URL (in der Reihenfolge der Priorität): die auf einer Listenansicht (
tx_mpcvidply_detail_page), einmpc_vidply_detailElement auf derselben Seite, dann die siteweite erste Detailseite; andernfalls ein#media-<uid>Fragment auf der aktuellen Seite.Mit und ohne mp-core
- Standalone: Ein eigenes
<script type="application/ld+json">wird gerendert,page.headerDataunter Verwendung eines CSP-Nonce gerendert. - Bei
mp_coregeladen: Der Knoten wird in den mp-core@graphund überWebPage.mainEntityverknüpft, sodass nur ein einziges JSON-LD-Skript ausgegeben wird. Wenn mp-core kein brauchbares@grapherzeugt, greift VidPly auf ein eigenständiges Dokument zurück.
- Standalone: Ein eigenes
Deaktivieren: Setzen Sie die Website-Einstellung
structuredDataEnabledauffalse, um das gesamte VidPly-JSON-LD für diese Website zu unterdrücken (standardmäßig aktiviert). Fügen Sie dies zuconfig/sites/<site>/config.yamlhin, falls Ihr Site-Set dies nicht definiert.Mit mp-core: Wenn mp-core JSON-LD ausgibt, fügt VidPly es in sein
@graph. mp-core benötigt möglicherweise außerdemseo.schema.enabled— beide Schalter müssen auf „true“ gesetzt sein, damit der globale Pfad für strukturierte Daten von mp-core verwendet wird. Siehe Integrations.md → Strukturierte Daten.
Automatisierte Tests
Die Erweiterung enthält eine PHPUnit-Suite, die auf typo3/testing-framework:
- Unit-Tests (
Tests/Unit/, Konfigurationphpunit.xml.dist) – schnell, ohne Datenbank. - Funktionstests (
Tests/Functional/, KonfigurationBuild/FunctionalTests.xml) – testen den Datenbank-/FAL-Code (Repository, Services, Prozessoren) anhand einer echten Datenbank.
Einrichtung (einmalig)
Installieren Sie die entwicklungsspezifischen Abhängigkeiten der Erweiterung in einem eigenständigen .Build/ Verzeichnisbaum (ausgehend vom Stammverzeichnis der Erweiterung – dem Verzeichnis, das die composer.json):
composer install --working-dir=vendor/mpc/mpc-vidply
# or, in a path-repo checkout:
composer install --working-dir=mpcore/packages/mpc-vidply
Funktionstests benötigen die Berechtigung, temporäre db_* zu erstellen. Erteilen Sie diese Berechtigung einmalig dem Benutzer „DDEV“ db :
ddev exec 'mysql -uroot -proot -e "GRANT ALL ON \`db_%\`.* TO \`db\`@\`%\`; FLUSH PRIVILEGES;"'
Führen Sie
# Unit tests (replace EXT_ROOT with your checkout path)
ddev exec 'cd mpcore/packages/mpc-vidply && .Build/bin/phpunit -c phpunit.xml.dist'
# Functional tests (point typo3Database* at the DDEV `db` service)
ddev exec 'cd mpcore/packages/mpc-vidply && \
typo3DatabaseDriver=mysqli typo3DatabaseHost=db typo3DatabaseName=db \
typo3DatabaseUsername=db typo3DatabasePassword=db \
.Build/bin/phpunit -c Build/FunctionalTests.xml'
Es sind auch Composer-Shortcuts definiert: composer test:unit und composer test:functional
(der funktionale benötigt noch die typo3Database* Umgebungsvariablen vorangestellt werden).
Abdeckung
Aktivieren Sie einen Coverage-Treiber (ddev xdebug onoder pcov installieren) und fügen Sie ein Coverage-Flag hinzu:
ddev exec 'cd mpcore/packages/mpc-vidply && XDEBUG_MODE=coverage .Build/bin/phpunit -c phpunit.xml.dist --coverage-text --coverage-html .Build/coverage'
Weiterführende Informationen
Zielgruppenbasierte Navigation und die vollständige Dokumentenliste: Übersicht.
Schnellübersicht
Installieren
composer require mpc/mpc-vidply
# → Database update → Include Site Set → Clear caches
Wichtige Dateien
| Was | Wo |
|---|---|
| Medien-TCA | Configuration/TCA/tx_mpcvidply_media.php |
| Inhalts-TCA | Configuration/TCA/Overrides/tt_content.php |
| Datenverarbeiter | Classes/DataProcessing/VidPlyProcessor.php |
| Datenschutzdienst | Classes/Service/PrivacySettingsService.php |
| Hauptvorlage | Resources/Private/Templates/VidPly.html |
| Datenschutz-JS | Resources/Public/JavaScript/PrivacyLayer.js |
| Datenschutz-CSS | Resources/Public/Css/privacy-layer.css |
Datenbank
-- Tables
tx_mpcvidply_media -- Media library
tx_mpcvidply_content_media_mm -- Content-to-media relation
tx_mpcvidply_privacy_settings -- Privacy layer configuration
Version: 1.2.17 | TYPO3: 13.4+ / 14.x | PHP: ≥8.2