Einfache Integration von YouTube und Vimeo Videos in TYPO3-Seiten

Wer schon einmal versucht hat, Videos von Videoportalen in eine TYPO3 Seite einzufügen, weiß, dass TYPO3 selbst keine eigens dafür konzipierte Lösung bietet. Es ist lediglich möglich YouTube und Vimeo Videos über das HTML-Element einzufügen oder Videos in der Dateiliste hochzuladen und anschließend im Text & Medien-Inhaltselement hinzuzufügen. Beide Wege sind nicht optimal für Videos, die sich auf den beliebten Videoportalen befinden, denn es fehlen Möglichkeiten, ihre Darstellung zu steuern. Letztere Option kann sich je nach Größe des Videos zudem stark auf die Leistung der Website auswirken.

Mit unseren TYPO3 Extensions erhalten Sie jeweils ein Plugin-Inhaltselement für YouTube-Videos und eines für Vimeo-Videos. Die sg_youtube und sg_vimeo Erweiterungen erlauben das Einbetten einzelner Videos, ganzer Kanäle oder Playlisten auf einer TYPO3 Seite, auch YouTube Shorts sind möglich. Videos müssen nicht auf den eigenen Servern hochgeladen werden und Sie haben vielfältige Gestaltungsmöglichkeiten: Bestimmen Sie, wie viele Videos von einem Kanal oder einer Playlist angezeigt werden und schließen Sie alle ungewünschten Videos aus. Wenn Sie nur Videos mit bestimmten Inhalten zeigen möchten, können Sie auch die praktische Filterfunktion im Backend nutzen oder aber Filter im Frontend einbauen, damit Nutzer und Nutzerinnen aktiv nach Videos suchen können. Legen Sie fest, ob Titel und Beschreibung der Videos angezeigt werden sollen und stellen Sie den Thumbnail-Typen ein bzw. ändern das Vorschaubild komplett. Mit diesen Einstellungsmöglichkeiten betten Sie YouTube und Vimeo Videos schnell und effizient in Ihre Website ein und sind in der Lage ganze Mediatheken unkompliziert aufzubauen.

Highlights

Mediathek im Handumdrehen

Sie betreiben einen YouTube Kanal oder einen Vimeo Kanal und möchten auf Ihrer Unternehmenswebsite eine Mediathek mit den Inhalten von den Videoportalen aufbauen? – Mit unseren TYPO3 Extensions für YouTube und Vimeo ist das nun auch für TYPO3 Seiten unkompliziert und schnell gemacht. Mit nur einem Plugin-Inhaltselement können Sie die Videos eines ganzen Channels oder einer Playlist abbilden. Ebenso einfach lassen sich einzelne Videos oder Shorts einbetten: bequem und nach Ihren Wünschen gestaltet.

Videos, Kanäle und Playlists/Showcases einfach mit IDs einbinden

Einfacher geht es wirklich kaum: Fügen Sie die ID eines Videos, einer Playlist bzw. eines Showcases oder eines Kanals von den beliebten Videoportalen YouTube oder Vimeo in das entsprechende Plugin Inhaltselement im Backend Ihrer TYPO3 Website, das Sie durch unsere Erweiterungen erhalten und schon sind die Videos in Ihre Website eingebettet, ohne diese auf Ihren Servern hochladen zu müssen. So lässt sich Ihr Website Content auflockern und komplexe Sachverhalte können anschaulich dargestellt werden, ohne Videos herunterladen zu müssen und mit potenziell großen Dateien Ihre Speicher-Kapazitäten auszulasten.

Layout & Verhalten steuern

Unsere TYPO3 Extensions für YouTube und Vimeo Videos erlauben es Ihnen, Videos in einem einheitlichen Look zu präsentieren. Wer optisch ein wenig variieren möchte, fügt mehrere YouTube oder Vimeo Inhaltselemente ein und nutzt die verschiedenen Einstellungsmöglichkeiten zum Layout, den Informationen, Thumbnails und Verhalten, womit z. B. bestimmte Videos hervorgehoben werden können, während bei anderen ein thematischer Zusammenhang optisch dargestellt werden kann. Je nach Bedarf können Videos mit Überschrift oder Beschreibung eingebettet werden. Sie bestimmen, ob Videos in einer Lightbox oder direkt auf der Seite abgespielt werden. Des Weiteren stehen Ihnen mehrere Layouts zur Verfügung. Die Möglichkeiten sind vielfältig, gleichzeitig sind die Inhaltselemente einfach und intuitiv zu bedienen.

Individuelle Thumbnails

Noch persönlicher wird Ihre Mediathek mit eigenen Thumbnails, das sind die kleinen Vorschaubilder, die zu sehen sind, bevor ein Video startet. Beide Video Extensions erlauben es, benutzerdefinierte Thumbnails selbst einzustellen. Dafür müssen Sie lediglich die Bilder, die als Thumbnails genutzt werden sollen, in der Dateiliste hochladen und mit dem entsprechenden Inhaltselement verknüpfen.

Filter

Mit Leichtigkeit können Sie im TYPO3-Backend ganze Videokanäle nach gewünschten Suchbegriffen filtern, sodass auf Ihrer Website nur relevante Videos angezeigt werden.

Bei einer großen Anzahl von Videos haben Sie außerdem die Möglichkeit, im Frontend Filter zu aktivieren, damit Ihre Nutzer gezielt nach Inhalten in der Video-Mediathek suchen können. So bleibt die Übersicht gewahrt und Ihre Besucher finden schneller die Videos, die für sie von Interesse sind. Dies optimiert nicht nur die User Experience, sondern fördert auch die Interaktivität und Verweildauer auf Ihrer Website.

Datenschutz

In Kombination mit dem Schutz externer Inhalte durch unsere Cookie Opt-In Extension für TYPO3 ist zudem eine datenschutzfreundliche Einbindung der Videos möglich. Unsere Erweiterung für Cookies und externe Inhalte verhindert, dass Cookies gesetzt werden, bevor Besucher und Besucherinnen diesen zugestimmt haben. Über externe Inhalte wird dafür eine Box gelegt, die es erlaubt, diesen Inhalt zu laden oder alle externen Inhalte zu akzeptieren. Außerdem ist es möglich, diese Box individuell zu gestalten.

sgalinski Cookie Opt-In für TYPO3

Unsere Cookie Consent Lösung passt perfekt zu den TYPO3 Video Extensions für YouTube und Vimeo und ermöglicht eine datenschutzkonforme Einbindung von Videos auf Ihrer TYPO3 Website – Besuchen Sie unsere Cookie Opt-In Produktseite für mehr Informationen!

Preise

TYPO3 Extensions zur Integration von YouTube und Vimeo Videos

Unsere Video-Erweiterungen für TYPO3 sind die einfachste Lösung, Videos von YouTube oder Vimeo in TYPO3-Seiten zu integrieren.

Die Plugin Inhaltselemente zum Einfügen der Videos sind intuitiv aufgebaut und einfach zu bedienen. Um Videos einzubetten, benötigen Sie nur die ID von YouTube oder Vimeo. Gemeinsam mit dem Schutz externer Inhalte durch unsere Cookie Opt-In Extension lässt sich das ganze zudem datenschutzfreundlich umsetzen.

  • Einfache Installation & schnelle Konfiguration
  • Intuitiv & einfach aufgebaut
  • Vielfältige Gestaltungsmöglichkeiten
  • Kostenfreie Updates für die gesamte Laufzeit Ihrer Lizenz

Preise:

  • Jahreslizenz1: 89,99 € pro Instanz
  • Lifetime-Lizenz1: 299,99 € pro Instanz
  • Volumenlizenz: Bei Bestellungen ab 20 Lizenzen werden 25 % Mengenrabatt gewährt und ab 50 Lizenzen werden 50 % Rabatt vergeben.

Überzeugen Sie sich von den Möglichkeiten unserer TYPO3 Video Extensions!

Zur Vorschau-Seite

Dokumentation

Um sicherzustellen, dass keine Fragen unbeantwortet bleiben, haben wir für unsere Nutzerinnen und Nutzer der TYPO3 Video Extensions umfassende Dokumentationen zusammengestellt. Diese Anleitungen führen Sie Schritt für Schritt durch die Installation und Integration der YouTube- und Vimeo-Erweiterungen und zeigen Ihnen den Umgang mit den Inhaltselementen, die Sie nach erfolgreicher Konfiguration in Ihrer TYPO3-Instanz finden werden.


1 Technische Dokumentation: API Keys, Installation & Integration

1.1 YouTube

1.1.1 YouTube API-Key

Die TYPO3 Extension für YouTube-Videos benötigt für eine korrekte Funktion einen YouTube API-Key. Gehen Sie wie folgt vor, um den API-Key für die YouTube API zu erhalten. Wir setzen in dieser Anleitung voraus, dass Sie bereits einen Google-Account haben und eingeloggt sind.

  • Gehen Sie zur Google Cloud Console: https://console.cloud.google.com/
    Sollten Sie sich noch nicht bei der Google Cloud Console angemeldet haben, erscheint das Fenster zur Anmeldung. Dort müssen Sie Ihr Land auswählen und die Nutzerbedingungen akzeptieren. Klicken Sie im Anschluss auf Zustimmen und Fortfahren.

 

  • Erstellen Sie ein neues Projekt: Klicken Sie in der Projektauswahl auf Neues Projekt. Geben Sie einen Namen für das Projekt ein und klicken Sie auf Erstellen. Das Erstellen des Projektes kann etwas dauern. Sobald das neue Projekt ‚fertig‘ ist, wird es Benachrichtigungen angezeigt.
  • Projekt auswählen: Klicken Sie direkt in den Benachrichtigungen auf Projekt auswählen oder gehen Sie zur Projektauswahl wie im vorherigen Schritt gezeigt und wählen dort das gerade erstelle Projekt.
  • API-Bibliothek aufrufen: Klicken im Menü links auf die Schaltfläche APIs und Dienste > Bibliothek. Hier finden Sie alle verfügbaren APIs/Dienste.
  • YouTube-API aktivieren: Scrollen Sie in der Bibliothek runter, bis Sie YouTube-APIs sehen oder nutzen Sie die Suchleiste. Klicken Sie auf die API Youtube Data API v3. Im Anschluss klicken Sie auf der Detailseite der API auf Aktivieren und gelangen zu den API/Dienstdetails.
  • Anmeldedaten erstellen und API-Schlüssel generieren: Für den API-Key müssen Sie nun auf die Schaltfläche Anmeldedaten erstellen klicken. Danach müssen Sie (falls nicht vorausgewählt) die API auswählen. Das ist in unserem Fall YouTube Data API v3. Wählen Sie bei der Frage 'Auf welche Daten wird zugegriffen?' die Checkbox 'Öffentliche Daten' und klicken dann auf Weiter. Jetzt sehen Sie bereits Ihren API-Schlüssel, den Sie direkt kopieren und nutzen können. Klicken Sie auf Fertig.
  • API-Schlüssel anzeigen und kopieren: Unter APIs und Dienste > Anmeldedaten finden Sie jederzeit den erstellten API-Schlüssel.

Sie haben den YouTube API-Schlüssel erstellt! – Tragen Sie den YouTube API-Key an der Stelle ein, wie es in der unten stehenden Dokumentation im Abschnitt TypoScript Integration beschrieben wird.

1.1.2 YouTube TYPO3 Extension: Installation & Integration

Ext: sg_youtube

License: GNU GPL, Version 2

Repository: https://gitlab.sgalinski.de/typo3/sg_youtube

Please report bugs here: https://gitlab.sgalinski.de/typo3/sg_youtube

Installation / Integration

First install the extension and activate it in the Extension Manager.

TypoScript integration

  • Include the TypoScript in Configuration/TypoScript/setup.typoscript and constants.typoscript in your theme.
  • Add your YouTube API key:
plugin.tx_sgyoutube {
	settings {
		# cat=plugin.tx_sgyoutube/file; type=string; label=YouTube API Key
		apiKey = <your-api-key>
	}
}

Registration for more than the free 10.000 quotas per day

It's not 1 quota per 1 API call. Each API has its own costs, which can be seen in the link below.

Currently, at the version 3.2.1 we are using the following APIs:

  • "search/list" for channel videos
  • "playlistItems/list" for videos from a specific playlist
  • "videos/list" for getting the details for each video and the localizations, if needed.

The maximum quota costs would be "102" at the moment for rendering the latest videos from a channel with the video details and translations.

Quota Calculator

YouTube API Services - Audit and Quota Extension Form

Caching behaviour

Because of the quota costs we implemented a caching for the calls for each day. The response from the APIs will be saved and used for 24 hours. Normally the site cache would do it, but it could be, that the cache will be cleared multiple times in a row, or that the plugin is on an uncached page. The TYPO3 registry is used as a cache. The cleanup is handled on the fly.

If the ?disableYoutubeCache=1 parameter is added to the URL, this cache will be ignored as well.

Possible way to solve the quota limit, if it's still reached

You can use a different API key for specific sites. You can implement a TypoScript page uid check and just change the key from the "TypoScript integration" topic.

Making changes in JavaScript/CSS

We are shipping the extension with source files and already minified assets. By default, the minified assets are loaded in the Layout, so that the extension works out of the box just with plug and play. Should you want to change this behavior, you can do the following:

  • Override the layout path in TypoScript local/project_theme/Configuration/TypoScript/Extensions/SgYouTube/Constants.typoscript
plugin.tx_sgyoutube {
	settings {
		apiKey = MY_KEY
	}

	view {
		layoutRootPath = EXT:project_theme/Resources/Private/Layouts/SgYouTube/
	}
}

  • Create a new layout file omitting the assets that you would like to change (for example, loading without CSS)
<div class="tx-sg-youtube">
	<f:asset.script identifier="sgVideoJs" src="EXT:sg_youtube/Resources/Public/JavaScript/Dist/main.bundled.min.js" />
	<f:render section="main"/>
</div>

  • Import the CSS or JavaScript source files in your respective asset pipeline and add them externally.

Compiling CSS/JS assets with SGC

  • Install the sgalinski/sgc-core library via composer
  • Add the sg-youtube extension paths in the .sgc-config.json
  • Remove the loading of the compiled CSS/JS assets from Resources/Private/Templates/Youtube/Index.html
  • Add import the scss and js module file in the corresponding main.scss and main.js
  • Initialize the javascript modules in your main.js: new SgVideoLightbox(); SgVideo.initDefault();
  • If you want to recompile the JS with SGC, you must add excludeFromQa: ['!**/Backend/**/*'] to your .sgc-config.js and also set your main extension in extensions to sg-youtube extensions: ['sg-youtube']

Compiling SASS only without SGC

Example:

npm install -g sass npx sass ./Resources/Public/Sass/Bootstrap5/main.scss ./Resources/Public/StyleSheets/Bootstrap5/main.min.css --style compressed --no-source-map

Using the Bootstrap 5 templates

If you want to use the Bootstrap 5 templates, you have to first install Bootstrap 5 in your theme to use its styles and JavaScript. Afterwards simply set the plugin.tx_project_theme.config.bootstrapVersion TypoScript setup variable to 5.

Using Events to Customize YouTube API Results in TYPO3

This documentation explains how to leverage custom events in your TYPO3 extension to manipulate the results of YouTube API calls. By using these events, you can modify the API parameters, filter results, and further customize the JSON data returned from YouTube.

Available Events

The following events are dispatched in the YouTube video rendering process:

  1. BeforeYoutubeCallEvent
  2. AfterYoutubeCallEvent
  3. AfterFilterVideosEvent
  4. AfterMapCustomThumbnailsEvent

Event Listeners

1. BeforeYoutubeCallEvent

Description: This event is triggered before making the YouTube API call, allowing you to modify the API parameters.

Example Use Case: Change API Key or manipulate other paramters
<?php

namespace Vendor\Extension\EventListener;

use SGalinski\SgYoutube\Event\BeforeVimeoCallEvent;

class BeforeYoutubeCallEventListener
{
    public function __invoke(BeforeVimeoCallEvent $event): void
    {
        // Change the API key
        $event->setApiKey('your-new-api-key');
        // Extend the max results limit by 10 videos
        $event->setMaxResultsWithFilters($event->getMaxResultsWithFilters() + 10);
    }
}

2. AfterYoutubeCallEvent

Description: Add Custom Data to JSON Array

Example Use Case: Change API Key or manipulate other paramters
<?php
namespace SGalinski\SgYoutube\EventListeners;

use SGalinski\SgYoutube\Event\AfterVimeoCallEvent;

class AfterYoutubeCallEventListener
{
	public function __invoke(AfterVimeoCallEvent $event): void
	{
		$jsonArray = $event->getJsonArray();
		// Add custom data
		$jsonArray['customData'] = 'This is some custom data';
		$event->setJsonArray($jsonArray);
	}
}

3. AfterFilterVideosEvent

Description: This event is triggered after the videos have been filtered, allowing you to further manipulate the filtered results.

Example Use Case: Remove the 10 videos that we added initially with the first event
<?php
namespace SGalinski\SgYoutube\EventListeners;

use SGalinski\SgYoutube\Event\AfterFilterVideosEvent;

class AfterFilterVideosEventListener
{
	public function __invoke(AfterFilterVideosEvent $event): void
	{
		// Modify the jsonArray if needed
		$jsonArray = $event->getJsonArray();
		// Add some custom processing here
		// For example let's remove the extra 10 videos that we added in the other event
		if (count($jsonArray['items']) > 10) {
			array_splice($jsonArray['items'], 0, 10);
		}
		$event->setJsonArray($jsonArray);
	}
}

4. AfterMapCustomThumbnailsEvent

Description: This event is triggered after custom thumbnails have been mapped, allowing you to modify the JSON array one last time before rendering.

Example Use Case: Use a custom thumbnail for all videos in the list
<?php
namespace SGalinski\SgYoutube\EventListeners;

use SGalinski\SgYoutube\Event\AfterMapCustomThumbnailsEvent;

class AfterMapCustomThumbnailsEventListener
{
    public function __invoke(AfterMapCustomThumbnailsEvent $event): void
    {
        $jsonArray = $event->getJsonArray();
        // Add a custom thumbnail URL
        foreach ($jsonArray['items'] as &$item) {
            $item['customThumbnail'] = 'https://example.com/custom-thumbnail.jpg';
        }
        $event->setJsonArray($jsonArray);
    }
}

To enable the events just register them in your Services.php as follows (you can use yaml instead if you prefer):

$services->set(BeforeYoutubeCallEventListener::class)
    ->tag('event.listener', ['event' => BeforeYoutubeCallEvent::class]);
$services->set(AfterYoutubeCallEventListener::class)
    ->tag('event.listener', ['event' => AfterYoutubeCallEvent::class]);
$services->set(AfterFilterVideosEventListener::class)
    ->tag('event.listener', ['event' => AfterFilterVideosEvent::class]);
$services->set(AfterMapCustomThumbnailsEventListener::class)
    ->tag('event.listener', ['event' => AfterMapCustomThumbnailsEvent::class]);

Setting Up the Frontend Filers

Step 1: Adding the Plugin to a Page

  1. In the TYPO3 backend, create or edit the page where you want to display YouTube videos.
  2. Add a new content element and select the YouTube plugin from the list.
  3. Provide the necessary YouTube details in the plugin settings (like YouTube API key, video/channel/playlist ID, max results, etc.).

Step 2: Disable caching for the extension and Cache validation for your web page

  1. In the TYPO3 backend, go to Settings -> Extensions and open the sg_youtube settings. Tick the box that says 'uncached' and save.
  2. This way the the extension will not cache the results and the the data will be loaded dynamically based on the filter settings.
  3. Set $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['enforceValidation'] = false in your TYPO3 configuration, otherwise using the frontend filters may result in a 404 page in some instances.

Step 3: Configuring Filters via FlexForm

  1. In the plugin's FlexForm settings, you will see a section for "Filters."
  2. Depending on your site configuration, filters will be available in a select field. You can select the filters you want to display (like search term, video duration, etc.).
  3. Save your settings and publish the page.

3. Using Filters in the Frontend

Once filters are enabled, they will appear on the frontend in a form, allowing users to interact with the displayed videos dynamically. For example:

  • Search Term: Allows users to input a search term to filter videos based on keywords.
  • Duration Filter: Provides a dropdown to filter videos by length (short, medium, long, etc.).

The filter values are sent to the YouTube API, and the video list updates based on the selected criteria.


4. TypoScript Configuration for Filters

To define custom filters, the plugin uses TypoScript. Below is an example configuration and an explanation of each section:

Example TypoScript Configuration

filters {
	searchTerm {
		label = LLL:EXT:sg_youtube/Resources/Private/Language/locallang.xlf:filter.searchTerm
		partial = Filters/TextField
		filterClass = SGalinski\SgYoutube\Filter\QueryStringFilter
		defaultValues {
#			search = test
		}
		position = top
	}
	duration {
		label = LLL:EXT:sg_youtube/Resources/Private/Language/locallang.xlf:filter.duration
		partial = Filters/Dropdown
		filterClass = SGalinski\SgYoutube\Filter\DurationFilter
		position = top
		options {
			0 {
				label = LLL:EXT:sg_youtube/Resources/Private/Language/locallang.xlf:filter.duration.0
				value = 1
			}
			1 {
				label = LLL:EXT:sg_youtube/Resources/Private/Language/locallang.xlf:filter.duration.1
				value = 2
			}
		}
	}
}

submitButton {
	position = top
	cssClass = btn btn-default
	label = LLL:EXT:sg_youtube/Resources/Private/Language/locallang.xlf:filter.submitButton
}

Explanation of the Configuration

filters

This TypoScript object defines all the available filters for the YouTube plugin. Each filter is a separate sub-object, like searchTerm and duration in the example.

Filter Fields

  1. searchTerm (Text Field)

    • label: The label for the filter form field. This can be translated using the TYPO3 language file (locallang.xlf).
    • partial: Specifies which partial file to use for rendering the filter. In this case, it points to a text field (Filters/TextField).
    • filterClass: This is the PHP class responsible for processing the filter and applying it to the YouTube API request. For the searchTerm, it's a QueryStringFilter.
    • defaultValues: You can specify default values for the filter (commented out in the example).
    • position: Defines where the filter should be displayed on the page. It can be top (above the video list) or bottom (below the video list).
  2. duration (Dropdown)

    • label: The label for the filter form field.
    • partial: Points to a dropdown partial (Filters/Dropdown).
    • filterClass: This is the PHP class responsible for processing the filter. For duration, it's DurationFilter.
    • options: This section defines the options for the dropdown, each with a label (for the user to see) and a value (sent to the API).
    • position: Indicates where the filter should be displayed on the page.

submitButton

  • Defines the configuration for the submit button:
    • position: Determines where the submit button is placed in the form (top in this case). It accepts top, bottom or both
    • cssClass: Adds CSS classes for styling the button.
    • label: Provides the text for the submit button (translatable using locallang.xlf).

5. Adding Custom Filters

You can easily extend the plugin by defining your own filters in TypoScript:

  1. Create a New Filter Add a new filter object under filters in your TypoScript setup. For example, if you want to filter by video quality, your configuration might look like this:

    filters {
        quality {
            label = LLL:EXT:sg_youtube/Resources/Private/Language/locallang.xlf:filter.quality
            partial = Filters/Dropdown
            filterClass = SGalinski\SgYoutube\Filter\QualityFilter
            position = top
            options {
                0 {
                    label = HD
                    value = hd
                }
                1 {
                    label = SD
                    value = sd
                }
            }
        }
    }
    
  2. Implement the Filter Logic You will need to define the corresponding PHP filterClass that handles the logic for applying the filter to the YouTube API request. For example, the QualityFilter class would process the selected video quality and add the appropriate parameters to the API request. It must implement the FilterInterface interface. The modifyRequest method is called before sending the reuqest, while the modifyResponse method is called after receiving the response.


6. Working with Filter Positions

You can choose where filters are displayed (above or below the video list) by setting the position attribute in the TypoScript configuration. This allows you to create a flexible layout for filters:

  • Filters with position = top will be displayed before the video list.
  • Filters with position = bottom will be displayed after the video list.

For example:

filters {
   searchTerm {
       position = top
   }
   duration {
       position = bottom
   }
}

7. Debugging and Error Handling

If something goes wrong (e.g., videos aren't displayed, or the API request fails), here are a few things to check:

  • Make sure the YouTube API key is correctly configured.
  • Check the TypoScript configuration for errors (e.g., missing or incorrect filter definitions).
  • Look for error messages in the TYPO3 backend log for issues related to the plugin.

8. Conclusion

With this flexible filter system, you can easily customize the YouTube video list based on user input. By defining filters in TypoScript and adding them to the plugin's FlexForm, you provide an interactive and tailored experience for your site's visitors.

If you need to add more filters, just extend the TypoScript configuration, create the necessary filter classes, and you're ready to go!


1.2 Vimeo

1.2.1 Vimeo Client ID und Client Secret

Die TYPO3 Extension für Vimeo-Videos benötigt für eine korrekte Funktion eine Vimeo Client ID und Client Secret. Wir zeigen Ihnen, wie Sie an die Keys für die Vimeo API kommen. Dabei setzen wir voraus, dass Sie bereits einen Vimeo-Account haben und eingeloggt sind. Sollte das nicht der Fall sein, müssen Sie sich vorher bei Vimeo registrieren (https://vimeo.com/) und/oder einloggen.

Sie haben bereits eine Vimeo App erstellt und brauchen nur Client ID und Client Secret für unsere TYPO3 Vimeo Extension? – Dann gehen Sie direkt zu den Apps auf der Vimeo Developer-Seite (https://developer.vimeo.com/apps). Dorthin gelangen mit dem eben genannten Link oder über die Benutzereinstellungen > API Apps. Klicken Sie dort auf die entsprechende App und lesen die notwendigen Daten aus, wie es im folgenden Abschnitt beschrieben wird.

  • Gehen Sie zur Vimeo Developer-Seite: https://developer.vimeo.com/
  • Erstellen Sie eine App: Klicken auf die Schaltfläche Create an App oder Get started, um eine neue App zu erstellen.
  • Geben Sie die Details der App ein: Wählen Sie einen Namen für die App und füllen Sie die Beschreibung aus. Wählen Sie bei der Frage: 'Will people besides you be able to access your app?' – 'No. The only Vimeo accounts that will have access to the app are my own.' Stimmen Sie der Vimeo API Lizenzvereinbarung und den Vimeo Nutzungsbedingungen zu und klicken Sie auf Create app.
  • Nach dem Erstellen der App gelangt man direkt zu der Übersicht der App. Dort finden Sie die benötigten Daten. Links finden Sie ein Menü, mit dem Sie zu direkt zum gewünschten Punkt springen können.
    • Ganz oben in den Informationen unter General Information finden Sie die Client ID bzw. den Client Identifier. Diesen können Sie sich zum gegebenen Zeitpunkt oder immer wenn notwendig kopieren.
    • Unter Manage App Secrets finden Sie den Vimeo Client Secret. Auch diesen können Sie sich jederzeit kopieren.

WICHTIG: Sie müssen sicherstellen, dass der Account, der mit den API-Schlüsseln clientId und clientSecret verknüpft ist, über die richtigen Berechtigungen für die Suche in dem Kanal verfügt, in dem die Filter verwendet werden. Andernfalls führt die Suche nach einer Abfragezeichenfolge immer zu einer leeren Ergebnismenge.


1.2.2 Vimeo Personal Access Token

Wenn Sie ein Vimeo Video auf Ihrer Website zeigen möchten, das nicht öffentlich zugänglich ist, benötigen Sie ein persönliches Zugriffstoken (Personal Access Token). Gehen Sie wie folgt vor, um ein persönliches Zugriffstoken zu erstellen.

  • Klicken Sie im Menü links auf Generate Access Token. Wählen Sie die Checkbox 'Authenticated (you)' aus. Wählen Sie dann unter Scopes: 'Public (required)' und 'Private' aus. Das sichert den langfristigen Zugriff auf die Daten, mehr dazu finden Sie auf der Vimeo-Seite zur Authentifizierung: https://developer.vimeo.com/api/authentication. Klicken Sie auf Generate.
  • Im Menü unter Personal Access Token erscheint nun das Zugriffstoken/Personal Access Token, das Sie kopieren und wie ein Passwort behandeln sollten.

Hinweis: Sobald Sie die Seite verlassen und/oder sie neu laden, werden Sie das Zugriffstoken nicht mehr kopieren können. Dieses wird danach unkenntlich sein. Jedoch ist es jederzeit möglich ein neues persönliches Zugriffstoken für eine Vimeo App zu erstellen oder es zu löschen.

Lesen Sie mehr zum Erstellungsprozess eines Vimeo Personal Access Token in der offiziellen Vimeo Dokumentation, unter: https://help.vimeo.com/hc/en-us/articles/12427789081745-How-do-I-generate-a-personal-access-token

Tragen Sie die Vimeo Keys an der Stelle ein, wie es in der unten stehenden Dokumentation im Abschnitt TypoScript Integration beschrieben wird.

1.2.3 Vimeo TYPO3 Extension: Installation & Integration

Ext: sg_vimeo

License: GNU GPL, Version 2

Repository: https://gitlab.sgalinski.de/typo3/sg_vimeo

Please report bugs here: https://gitlab.sgalinski.de/typo3/sg_vimeo

Installation / Integration

First install the extension and activate it in the Extension Manager.

Vimeo app

TypoScript integration

  • Include the TypoScript in Configuration/TypoScript/setup.typoscript and constants.typoscript in your theme.
  • Add your Vimeo client identifier & client secret (and optionally your personal access token):
plugin.tx_sgvimeo {
	settings {
		# cat=plugin.tx_sgvimeo/file; type=string; label=Vimeo client identifier
		clientId = <your-client-id>
		# cat=plugin.tx_sgvimeo/file; type=string; label=Vimeo client secret
		clientSecret = <your-client-secret>
		# cat=plugin.tx_sgvimeo/file; type=string; label=Vimeo Personal access token
		personalAccessToken =
	}
}

Private videos

If you have a video which is not available to the public, but you want to show it on your website, you need an authenticated personal access token. You can find a guide, on how to generate such a token here: https://vimeo.zendesk.com/hc/en-us/articles/360042445032-How-do-I-generate-a-personal-access-token-

The following requirements have to be met, for the private video to show up:

  • the video has to be hosted on the same vimeo account, that was used to configure the clientSecret & clientId (vimeo app)
  • a personal access token with access scope "private" has to be configured in the typoscript settings ( personalAccessToken)

Working with Rate Limits

As with almost every API, there is a usage limit, which depends on the vimeo user membership of the user, that makes the API requests (the owner of the vimeo app).

sg_vimeo uses the following endpoints:

  • Video - api.vimeo.com/videos/{video_id}
  • Channel Videos - api.vimeo.com/channels/{channel_id}/videos

sg_vimeo uses field filtering to request only the fields that are needed.

Caching behaviour

Because of the quota costs, we implemented a caching for the calls for each day. The response from the APIs will be saved and used for 24 hours. Normally, the site cache would do it, but it could be, that the cache will be cleared multiple times in a row, or that the plugin is on an uncached page. The TYPO3 registry is used as a cache. The cleanup is handled on the fly.

If the ?disableVimeoCache=1 parameter is added to the URL, this cache will be ignored as well.

.htaccess - Content-Security-Policy

Requires img-src https://i.vimeocdn.com;, script-src https://player.vimeo.com;.

Making changes in JavaScript/CSS

We are shipping the extension with source files and already minified assets. By default, we the minified assets are loaded in the Layout, so that the extension works out of the box just with plug and play. Should you want to change this behavior, you can do the following:

  • Override the layout path in TypoScript local/project_theme/Configuration/TypoScript/Extensions/SgVimeo/Constants.typoscript
plugin.tx_sgvimeo {
	settings {
		clientId = MY_CLIENT_ID
		clientSecret = MY_CLIENT_SECRET
	}

	view {
		layoutRootPath = EXT:project_theme/Resources/Private/Layouts/SgVimeo/
	}
}

  • Create a new layout file omitting the assets that you would like to change (for example, loading without CSS)
<div class="tx-sg-vimeo">
	<f:asset.script identifier="sgVideoJs" src="EXT:sg_vimeo/Resources/Public/JavaScript/Dist/main.bundled.min.js" />
	<f:render section="main"/>
</div>

  • Import the CSS or JavaScript source files in your respective asset pipeline and add them externally.

Compiling CSS/JS assets with SGC

  • Install the sgalinski/sgc-core library via composer
  • Add the sg-vimeo extension paths in the .sgc-config.json
  • Remove the loading of the compiled CSS/JS assets from Resources/Private/Templates/Vimeo/Index.html
  • Add import the scss and js module file in the corresponding main.scss and main.js
  • Initialize the javascript modules in your main.js: new SgVideoLightbox(); SgVideo.initDefault();
  • If you want to recompile the JS with SGC, you must add excludeFromQa: ['!**/Backend/**/*'] to your .sgc-config.js and also set your main extension in extensions to sg-vimeo extensions: ['sg-vimeo']

Compiling SASS only without SGC

Example:

npm install -g sass npx sass ./Resources/Public/Sass/Bootstrap5/main.scss ./Resources/Public/StyleSheets/Bootstrap5/main.min.css --style compressed --no-source-map

Using the Bootstrap 5 templates

If you want to use the Bootstrap 5 templates, you have to first install Bootstrap 5 in your theme to use its styles and JavaScript. Afterwards simply set the plugin.tx_project_theme.config.bootstrapVersion TypoScript setup variable to 5.

Using Events to Customize Vimeo API Results in TYPO3

This documentation explains how to leverage custom events in your TYPO3 extension to manipulate the results of Vimeo API calls. By using these events, you can modify the API parameters, filter results, and further customize the JSON data returned from Vimeo.

Available Events

The following events are dispatched in the Vimeo video rendering process:

  1. BeforeVimeoCallEvent
  2. AfterVimeoCallEvent
  3. AfterFilterVideosEvent
  4. AfterMapCustomThumbnailsEvent

Event Listeners

1. BeforeVimeoCallEvent

Description: This event is triggered before making the Vimeo API call, allowing you to modify the API parameters.

Example Use Case: Change API Key or manipulate other paramters
<?php

namespace Vendor\Extension\EventListener;

use SGalinski\SgVimeo\Event\BeforeVimeoCallEvent;

class BeforeVimeoCallEventListener
{
    public function __invoke(BeforeVimeoCallEvent $event): void
    {
        // Change the API key
        $event->setApiKey('your-new-api-key');
        // Extend the max results limit by 10 videos
        $event->setMaxResultsWithFilters($event->getMaxResultsWithFilters() + 10);
    }
}

2. AfterVimeoCallEvent

Description: Add Custom Data to JSON Array

Example Use Case: Change API Key or manipulate other paramters
<?php
namespace SGalinski\SgVimeo\EventListeners;

use SGalinski\SgVimeo\Event\AfterVimeoCallEvent;

class AfterVimeoCallEventListener
{
	public function __invoke(AfterVimeoCallEvent $event): void
	{
        $response = $event->getResponse();
		// Add custom data
		$response['customData'] = 'This is some custom data';
		$event->setResponse($response);
	}
}

3. AfterFilterVideosEvent

Description: This event is triggered after the videos have been filtered, allowing you to further manipulate the filtered results.

Example Use Case: Remove the 10 videos that we added initially with the first event
<?php
namespace SGalinski\SgVimeo\EventListeners;

use SGalinski\SgVimeo\Event\AfterFilterVideosEvent;

class AfterFilterVideosEventListener
{
	public function __invoke(AfterFilterVideosEvent $event): void
	{
		// Modify the response if needed
		$response = $event->getResponse();
		// Add some custom processing here
		// For example let's remove the extra 10 videos that we added in the other event
		if (count($response['items']) > 10) {
			array_splice($response['items'], 0, 10);
		}
		$event->setResponse($response);
	}
}

4. AfterMapCustomThumbnailsEvent

Description: This event is triggered after custom thumbnails have been mapped, allowing you to modify the JSON array one last time before rendering.

Example Use Case: Use a custom thumbnail for all videos in the list
<?php
namespace SGalinski\SgVimeo\EventListeners;

use SGalinski\SgVimeo\Event\AfterMapCustomThumbnailsEvent;

class AfterMapCustomThumbnailsEventListener
{
    public function __invoke(AfterMapCustomThumbnailsEvent $event): void
    {
        $response = $event->geRresponse();
        // Add a custom thumbnail URL
        foreach ($response['items'] as &$item) {
            $item['customThumbnail'] = 'https://example.com/custom-thumbnail.jpg';
        }
        $event->setResponse($response);
    }
}

To enable the events just register them in your Services.php as follows (you can use yaml instead if you prefer):

$services->set(BeforeVimeoCallEventListener::class)
    ->tag('event.listener', ['event' => BeforeVimeoCallEvent::class]);
$services->set(AfterVimeoCallEventListener::class)
    ->tag('event.listener', ['event' => AfterVimeoCallEvent::class]);
$services->set(AfterFilterVideosEventListener::class)
    ->tag('event.listener', ['event' => AfterFilterVideosEvent::class]);
$services->set(AfterMapCustomThumbnailsEventListener::class)
    ->tag('event.listener', ['event' => AfterMapCustomThumbnailsEvent::class]);

Usage in non-composer mode (Classic, Legacy)

This extentension has depdendencies from 3rd party sources that we import through composer. Should you have an installation in legacy mode (non-composer), we need to import these libraries. For this purpose we have the Libraries/ directory where we put the dependencies as PHAR files. You can check how they are used in Services/VimeoService.php.

If the dependencies are updated in composer though, we need to regenerate the PHAR file and commit it again. For this we first pull the new version with composer and then we need to create the PHAR archive by using the following PHP code:

<?php

$pharFile = __DIR__ . '/../sg_vimeo.phar';

// Remove previous PHAR file if it exists
if (file_exists($pharFile)) {
    unlink($pharFile);
}

$phar = new Phar($pharFile);
$phar->startBuffering();

// Add your extension's files
$phar->buildFromDirectory(__DIR__ . '/../sg_vimeo');

// Optionally, add files from the vendor directory
$phar->buildFromDirectory(__DIR__ . '/../sg_vimeo');

// Optionally, set the default stub to load an entry script
$stub = <<<EOD
<?php
Phar::mapPhar();
require 'phar://' . __FILE__ . '/Classes/Main.php';
__HALT_COMPILER();
EOD;

$phar->setStub($stub);

// Stop buffering and save the PHAR file
$phar->stopBuffering();

echo "PHAR file created successfully!";

Once it runs it will create the file and we can commit the new version and use it.

Setting Up the Frontend Filers

Step 1: Adding the Plugin to a Page

  1. In the TYPO3 backend, create or edit the page where you want to display Vimeo videos.
  2. Add a new content element and select the Vimeo plugin from the list.
  3. Provide the necessary Vimeo details in the plugin settings (like Vimeo API key, video/channel/playlist ID, max results, etc.).

Step 2: Disable caching for the extension and Cache validation for your web page

  1. In the TYPO3 backend, go to Settings -> Extensions and open the sg_vimeo settings. Tick the box that says 'uncached' and save.
  2. This way the the extension will not cache the results and the the data will be loaded dynamically based on the filter settings
  3. Set $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['enforceValidation'] = false in your TYPO3 configuration, otherwise using the frontend filters may result in a 404 page in some instances.

Step 3: Configuring Filters via FlexForm

  1. In the plugin's FlexForm settings, you will see a section for "Filters."
  2. Depending on your site configuration, filters will be available in a select field. You can select the filters you want to display (like search term, video duration, etc.).
  3. Save your settings and publish the page.
  4. IMPORTANT! You must make sure that the user associated with the clientId and clientSecret API keys has the right permissions to search in the channel where the filters are being used. Otherwise searching for a query string will always result in an empty result set.

3. Using Filters in the Frontend

Once filters are enabled, they will appear on the frontend in a form, allowing users to interact with the displayed videos dynamically. For example:

  • Search Term: Allows users to input a search term to filter videos based on keywords.
  • Duration Filter: Provides a dropdown to filter videos by length (short, medium, long, etc.).

The filter values are sent to the Vimeo API, and the video list updates based on the selected criteria.


4. TypoScript Configuration for Filters

To define custom filters, the plugin uses TypoScript. Below is an example configuration and an explanation of each section:

Example TypoScript Configuration

filters {
	searchTerm {
		label = LLL:EXT:sg_vimeo/Resources/Private/Language/locallang.xlf:filter.searchTerm
		partial = Filters/TextField
		filterClass = SGalinski\SgVimeo\Filter\QueryStringFilter
		defaultValues {
#			search = test
		}
		position = top
	}
	duration {
		label = LLL:EXT:sg_vimeo/Resources/Private/Language/locallang.xlf:filter.duration
		partial = Filters/Dropdown
		filterClass = SGalinski\SgVimeo\Filter\DurationFilter
		position = top
		options {
			0 {
				label = LLL:EXT:sg_vimeo/Resources/Private/Language/locallang.xlf:filter.duration.0
				value = 1
			}
			1 {
				label = LLL:EXT:sg_vimeo/Resources/Private/Language/locallang.xlf:filter.duration.1
				value = 2
			}
		}
	}
}

submitButton {
	position = top
	cssClass = btn btn-default
	label = LLL:EXT:sg_vimeo/Resources/Private/Language/locallang.xlf:filter.submitButton
}

Explanation of the Configuration

filters

This TypoScript object defines all the available filters for the Vimeo plugin. Each filter is a separate sub-object, like searchTerm and duration in the example.

Filter Fields

  1. searchTerm (Text Field)

    • label: The label for the filter form field. This can be translated using the TYPO3 language file (locallang.xlf).
    • partial: Specifies which partial file to use for rendering the filter. In this case, it points to a text field (Filters/TextField).
    • filterClass: This is the PHP class responsible for processing the filter and applying it to the Vimeo API request. For the searchTerm, it's a QueryStringFilter.
    • defaultValues: You can specify default values for the filter (commented out in the example).
    • position: Defines where the filter should be displayed on the page. It can be top (above the video list) or bottom (below the video list).
  2. duration (Dropdown)

    • label: The label for the filter form field.
    • partial: Points to a dropdown partial (Filters/Dropdown).
    • filterClass: This is the PHP class responsible for processing the filter. For duration, it's DurationFilter.
    • options: This section defines the options for the dropdown, each with a label (for the user to see) and a value (sent to the API).
    • position: Indicates where the filter should be displayed on the page.

submitButton

  • Defines the configuration for the submit button:
    • position: Determines where the submit button is placed in the form (top in this case). It accepts top, bottom or both
    • cssClass: Adds CSS classes for styling the button.
    • label: Provides the text for the submit button (translatable using locallang.xlf).

5. Adding Custom Filters

You can easily extend the plugin by defining your own filters in TypoScript:

  1. Create a New Filter Add a new filter object under filters in your TypoScript setup. For example, if you want to filter by video quality, your configuration might look like this:

    filters {
        quality {
            label = LLL:EXT:sg_vimeo/Resources/Private/Language/locallang.xlf:filter.quality
            partial = Filters/Dropdown
            filterClass = SGalinski\SgVimeo\Filter\QualityFilter
            position = top
            options {
                0 {
                    label = HD
                    value = hd
                }
                1 {
                    label = SD
                    value = sd
                }
            }
        }
    }
    
  2. Implement the Filter Logic You will need to define the corresponding PHP filterClass that handles the logic for applying the filter to the Vimeo API request. For example, the QualityFilter class would process the selected video quality and add the appropriate parameters to the API request. It must implement the FilterInterface interface. The modifyRequest method is called before sending the reuqest, while the modifyResponse method is called after receiving the response.


6. Working with Filter Positions

You can choose where filters are displayed (above or below the video list) by setting the position attribute in the TypoScript configuration. This allows you to create a flexible layout for filters:

  • Filters with position = top will be displayed before the video list.
  • Filters with position = bottom will be displayed after the video list.

For example:

filters {
   searchTerm {
       position = top
   }
   duration {
       position = bottom
   }
}

7. Debugging and Error Handling

If something goes wrong (e.g., videos aren't displayed, or the API request fails), here are a few things to check:

  • Make sure the Vimeo API key is correctly configured.
  • Check the TypoScript configuration for errors (e.g., missing or incorrect filter definitions).
  • Look for error messages in the TYPO3 backend log for issues related to the plugin.

8. Conclusion

With this flexible filter system, you can easily customize the Vimeo video list based on user input. By defining filters in TypoScript and adding them to the plugin's FlexForm, you provide an interactive and tailored experience for your site's visitors.

If you need to add more filters, just extend the TypoScript configuration, create the necessary filter classes, and you're ready to go!


1.3 Lizenzschlüssel eintragen

Um unsere Extensions nutzen zu können, benötigen Sie einen Lizenzschlüssel. Die Lizenzen für unsere Produkte erwerben Sie in dem sgalinski Online-Shop.  Den oder die erworbenen Lizenzschlüssel für die Video Extensions tragen Sie im Backendmodul Einstellungen unter Extension Configuration bei sg_youtube bzw. sg_vimeo ein.


2 Redaktionelle Dokumentation: Plug-In Inhaltselemente

YouTube

Mit dem YouTube Plug-In lassen sich YouTube-Videos unkompliziert einbinden, ohne dass Videos heruntergeladen und im System wieder hochgeladen werden müssen. Zudem besitzt das Inhaltselement diverse Optionen, mit denen sich die Darstellung und Verhalten der Videos individuell anpassen lassen.

Reiter Plug-in

Einstellungen

ID eines Channels, einer Playlist oder eines einzelnen Videos

Tragen Sie hier die ID des Kanals, der Playlist oder eines einzelnen YouTube-Videos ein. Mehrere IDs tragen Sie durch Kommas getrennt ein (ABCD_12, EFGH_34). Im Abschnitt zu den YouTube IDs zeigen wir, wo die IDs zu finden sind.

Video ist ein "YouTube Shorts"-Video

Unsere Video-Extension erlaubt es auch, YouTube Shorts zu nutzen. Aktivieren Sie dafür die Checkbox und stellen Sie sicher, dass Sie im Tab Aussehen einen Thumbnail-Typ mit hoher Auflösung nutzen sowie das Seitenverhältnis 4:3 wählen. Bei benutzerdefinierten Thumbnails sollten die Bilder ein Verhältnis von 9:16 haben.

Ausschließende Video-IDs

Wenn Sie bestimmte Videos einer Playlist oder eines Kanals nicht auf Ihrer Website zeigen möchten, können Sie diese ausschließen. Tragen Sie die entsprechenden IDs mit einem Komma getrennt hintereinander weg ein (ABCD_12, EFGH_34).

Abfragetext

Dieses Feld kann genutzt werden, wenn Sie bspw. nicht alle Videos eines gesamten Kanals einbinden möchten, sondern nur die mit bestimmten Inhalten, Themen oder Tags. Sie können dieses Feld wie die Suche in YouTube nutzen.

Maximale Anzahl

Entscheiden Sie, wie viele Videos maximal angezeigt werden sollen und tragen Sie die gewünschte Zahl ein. Bitte beachten Sie, dass manche Layouts nur bei oder ab einer bestimmten Anzahl von Videos funktionieren (siehe Layout-Art beim Abschnitt 'Aussehen').

Zusätzliche URL-Parameter

Für weitere Anpassungen der eingebundenen Videos können Sie YouTube Player Parameter nutzen. Die Parameter funktionieren nur, wenn Videos direkt auf der Seite abgespielt werden. Mehr Informationen dazu finden Sie unter: https://developers.google.com/youtube/player_parameters?hl=de.

Filter

Wenn Sie besonders viele Videos einbinden, können Filter sinnvoll sein. Je nach Konfiguration stehen Ihnen im rechten Feld verschiedene Filter zur Verfügung. Klicken Sie auf den oder die gewünschten Filter. Diese erscheinen nun im linken Feld und werden und werden nach dem Speichern im Frontend in einem Formular angezeigt, sodass die Benutzer dynamisch mit den angezeigten Videos interagieren können. Zum Beispiel:

  • Suchbegriff: Ermöglicht Benutzern die Eingabe eines Suchbegriffs, um Videos nach Schlüsselwörtern zu filtern.
  • Dauer-Filter: Bietet ein Dropdown-Menü zum Filtern von Videos nach Länge (kurz, mittel, lang, usw.).

Die Filterwerte werden an die YouTube-API gesendet, und die Videoliste wird anhand der ausgewählten Kriterien aktualisiert.

WICHTIG: Befolgen Sie folgende zwei Schritte, wenn Sie Filter nutzen wollen!

  1. Gehen Sie im TYPO3-Backend zum Modul Einstellungen (Abschnitt Verwaltung- und Pflegewerkzeuge) und klicken Sie auf Configure extensions. Klicken Sie auf sg_youtube, aktivieren Sie die Checkbox uncached und speichern Sie. Dadurch wird die Extension die Ergebnisse nicht zwischenspeichern und die Daten werden dynamisch geladen, basierend auf den Filtereinstellungen.
  2. Weiterhin müssen Sie in Ihrer Konfiguration die TYPO3 cHash Parameter-Validierung deaktivieren und $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['enforceValidation'] = false setzen.

Aussehen

Layout-Art

Zur Auswahl stehen das Standard-, Zeilen- oder Playlist-Layout. Außerdem gibt es das Layout für einzelne Videos, das automatisch genutzt wird, wenn Sie nur ein Video einbinden. Wichtig ist zudem zu wissen, dass das Standard- und das Zeilenlayout ab zwei Videos und das Playlist-Layout ab vier Videos funktionieren. Wie diese aussehen, präsentieren wir auf unserer Vorschau-Seite.

Videotitel anzeigen & Videobeschreibungen anzeigen

Mit diesen Checkboxen können Sie festlegen, ob Titel oder Beschreibungen des Videos angezeigt werden sollen oder nicht. Wenn Sie keine Titel und/oder Beschreibungen anzeigen, müssen Sie keine Zeichenbegrenzung festlegen.

Zeichenbegrenzung bei Titel & Beschreibung

Titel und Beschreibungen von Videos können unterschiedlich lang sein, deswegen können Sie eine Begrenzung für Titel und Beschreibung festlegen. Das Plug-in bricht dabei nicht mitten im Wort ab, sondern berücksichtigt ganze Wörter. Standardmäßig ist der Wert '0' (null) eingetragen, mit dieser Einstellung gibt es keine Begrenzung für die Zeichenanzahl.
Unabhängig zu der Zeichenanzahl sind die Zeilen der Beschreibung begrenzt: beim einzelnen Video, dem Standard- und dem Playlist-Layout sind es vier Zeilen und beim Zeilenlayout fünf Zeilen. Im Frontend lässt sich Rest der Beschreibung über einen Button aufklappen. Beachten Sie außerdem, dass bei der einer Zeichenbegrenzung der Beschreibung, der Text immer nur bis zur Begrenzung gezeigt wird, auch wenn Sie diese aufklappen.

Aspect Ratio

Legen Sie das Seitenverhältnis fest. Die Einstellung wird nur genutzt, wenn der Thumbnail-Typ das prüfen soll. Diese Einstellung beeinflusst nicht das Seitenverhältnis der benutzerdefinierten Thumbnails.

Thumbnail-Typ

Legen Sie hier die Auflösung von maximal bis niedrig fest. Nicht immer sind alle Optionen vorhanden.

Benutzerdefinierte Thumbnails für Videos

Es besteht auch die Möglichkeit, eigene Thumbnail-Bilder für Videos festzulegen. Dabei wird das erste Bild über das erste Video gelegt, das zweite Bild wird über das zweite Video gelegt usw.
Das Seitenverhältnis der benutzerdefinierten Thumbnails entspricht dem Seitenverhältnis des verwendeten Bildes. Laden Sie Bilder mit dem gewünschten Seitenverhältnis in der Dateiliste hoch oder bearbeiten Sie die Miniaturansichten im Fotoeditor direkt in diesem Inhaltselement, um das gewünschte Seitenverhältnis zu erreichen.

Verhalten

Video nicht in der Lightbox, sondern direkt auf der Webseite abspielen

Standardmäßig wird ein Video in einer Lightbox abgespielt. Sie können hier festlegen, Videos direkt auf der Seite abspielen zu lassen.

Zeige API-Ergebnis an

Legen Sie fest, ob Debug-Informationen angezeigt werden sollen.

YouTube IDs

YouTube Kanal-ID

Es gibt verschiedene Wege, um die Kanal-ID herauszufinden, denn durch die URL ist die ID schon seit einiger Zeit nicht mehr ersichtlich. Wenn es sich um die ID des eigenen YouTube-Kanals handelt, findet man die Buchstaben und Zahlenfolge in den erweiterten Einstellungen des Accounts. Dazu finden Sie hier eine Anleitung von Google.

Wenn Sie die Kanal-ID eines beliebigen YouTube-Kanals benötigen, müssen Sie dafür in YouTube den gewünschten Kanal öffnen. Klicken Sie in der Kanalbeschreibung auf 'mehr' und klicken dann im erschienen Fenster auf Kanal teilen. Dort finden Sie die Option ‘Kanal-ID kopieren’. Die kopierte ID können Sie dann in die YouTube-Extension einfügen.

Die Kanal-ID fügen Sie dann einfach in das Plug-In ein und machen alle weiteren Einstellungen, die Sie benötigen.

YouTube Playlist-ID

Um eine Playlist-ID hinzuzufügen, kopieren Sie aus dem Link der Playliste alles, was nach list= kommt und fügen es in Zeile für die ID ein.

  • Playlist-Link: www.youtube.com/watch?v=rrVDATvUitA&list=PLmhUZw8WWzebYTvtVWHkb_YMgKARy6UON
  • Playlist-ID: PLmhUZw8WWzebYTvtVWHkb_YMgKARy6UON
YouTube Video-ID

Um eine Video-ID hinzuzufügen, kopieren Sie aus dem Link des Videos alles, was nach watch?v= kommt und fügen es in Zeile für die ID ein.

  • Video-Link: www.youtube.com/watch?v=IBAhAk0-sPo
  • Video-ID: IBAhAk0-sPo

Inhaltsbereich

Im Inhaltsbereich sehen Sie eine Übersicht über die Einstellungen, die Sie im YouTube Plug-In vorgenommen haben.

YouTube im Frontend

Je nachdem, welche Einstellungen im Plug-In gewählt wurden, können Videos, Playlists und Kanäle ganz unterschiedlich aussehen. Auf unserer Vorschau-Seite sehen Sie einige Beispiele, wie unterschiedliche Einstellungen sich auf die Optik im Frontend auswirken.

Vimeo

Mit dem Vimeo Plug-in können Vimeo-Videos auf einer TYPO3-Seite angezeigt werden, ohne dass die Videos heruntergeladen und wieder ins System hochgeladen werden müssen. Außerdem verfügt das Inhaltselement, wie auch das YouTube-Plugin, über verschiedene Optionen, mit denen sich Aussehen und Verhalten der Videos individuell anpassen lassen.

Reiter Plug-In

Ihnen stehen folgende Optionen zur Verfügung. Diese gleichen den Optionen für das YouTube Plug-In. Beim Bearbeiten des Vimeo Inhaltselements können Sie sich also an den YouTube Anleitungen orientieren.

Einstellungen

  • Video-ID, Kanal-Name oder Showcase: Im Abschnitt zu den Vimeo IDs zeigen wir, wo die IDs zu finden sind.
  • Auszuschließende Video-IDs
  • Abfragetext
  • Maximale Anzahl
  • Zusätzliche URL-Parameter: Wie bei YouTube können Sie für weitere Anpassungen Parameter nutzen. Das funktioniert nur, wenn Videos direkt auf der Seite abgespielt werden. Mehr Informationen zu Parametern finden Sie unter: https://help.vimeo.com/hc/en-us/articles/12426260232977-Player-parameters-overview.
  • Filter

Aussehen

  • Layout-Art
  • Videotitel anzeigen & Videobeschreibungen anzeigen
  • Zeichenbegrenzung für Titel & Beschreibungen
  • Benutzerdefinierte Thumbnails für Videos

Verhalten

  • Video nicht in der Lightbox, sondern direkt auf der Webseite abspielen
  • Zeige API-Ergebnis an

Vimeo-Video IDs

Vimeo Kanal-Name

Um eine Kanal-ID hinzuzufügen, kopieren Sie aus dem Link des Kanals alles, was nach vimeo.com/channels/ kommt und fügen es in Zeile für die ID ein.

  • Kanal-Link: vimeo.com/channels/staffpicks
  • Kanal-Name: staffpicks
Vimeo-Showcase ID

Um eine Showcase ID hinzuzufügen, kopieren Sie aus dem Showcase-Link alles, was nach vimeo.com/showcase/ kommt und fügen es in Zeile für die ID ein.

  • Showcase-Link: vimeo.com/showcase/vimeocanhelp
  • Showcase ID: vimeocanhelp
Vimeo-Video ID

Um eine Video ID hinzuzufügen, kopieren Sie aus dem Link des Videos alles, was nach vimeo.com/ kommt und fügen es in Zeile für die ID ein.

  • Video-Link: vimeo.com/246107487
  • Video ID: 246107487

WICHTIG: Sie müssen sicherstellen, dass der Account, der mit den API-Schlüsseln clientId und clientSecret verknüpft ist, über die richtigen Berechtigungen für die Suche in dem Kanal verfügt, in dem die Filter verwendet werden. Andernfalls führt die Suche nach einer Abfragezeichenfolge immer zu einer leeren Ergebnismenge.

Inhaltsbereich

Im Inhaltsbereich sehen Sie eine Übersicht über die Einstellungen, die Sie im Vimeo Plug-In vorgenommen haben.

Vimeo im Frontend

Je nach vorgenommenen Einstellungen kann das Ergebnis im Frontend sehr unterschiedlich aussehen. In unserer Vorschau-Seite sehen Sie einige Beispiele dafür.

FAQ

Was ist ein eingebettetes Video?

Ein eingebettetes Video ist ein Video, das in einer Webseite integriert ist und direkt von dort abgespielt wird, ohne dass der Benutzer oder die Benutzerinn auf eine andere Website oder einen externen Player wechseln muss. Es wird häufig von Video-Sharing-Plattformen wie YouTube oder Vimeo bereitgestellt und kann über einen Embed-Code auf anderen Websites eingefügt werden.

Was ist eine Mediathek?

Eine Mediathek ist eine Sammlung von Mediendateien wie Videos, Audios, Bildern und Dokumenten, die zentral gespeichert und verwaltet werden. Mediatheken werden häufig von Organisationen, Unternehmen, Websites und Social-Media-Plattformen genutzt, um ihre digitalen Inhalte zu verwalten und zu teilen. Durch die Verwendung einer Mediathek kann man einfach auf alle Mediendateien zugreifen und sie in anderen Kontexten verwenden, ohne sie jedes Mal neu hochladen zu müssen.

Welche Videoportale gibt es?

Es gibt eine Vielzahl von Videoportalen, einige der bekanntesten sind:  YouTube, Vimeo, Dailymotion, Facebook Video, Twitch, TikTok, Instagram TV (IGTV), LinkedIn Video, Twitter Video.

Das ist allerdings eine kurze Liste, es gibt viele weitere Videoportale, die je nach Zielgruppe und Zweck unterschiedlich sind.

Was sind Kontingente für YouTube Videos?

Kontingente für YouTube-Videos sind Limits, die auf die Anzahl der Ansichten eines Videos oder auf die Anzahl der Aufrufe einer Playlist auf einer bestimmten Website oder einer bestimmten Domain festgelegt werden. Diese Limits werden von YouTube eingerichtet, um die Verwendung des Video- und Playlistinhalts zu regulieren und zu überwachen. Kontingente können auf verschiedene Weise eingesetzt werden, z. B. um die Verwendung des Inhalts für kommerzielle Zwecke zu beschränken oder um sicherzustellen, dass ein Video nur auf bestimmten Websites verwendet wird. Wenn ein Kontingent erreicht wird, wird das Video oder die Playlist möglicherweise nicht mehr auf der betreffenden Website angezeigt.

Kann man Vimeo kostenlos nutzen?

Es gibt eine kostenlose Version von Vimeo, die es Benutzern ermöglicht, Videos hochzuladen und zu teilen. Allerdings sind bestimmte Funktionen und Optionen, wie z.B. unbeschränkte Speicherkapazität, erweiterte Analyse-Tools und die Möglichkeit, Videos mit einer eigenen Domain zu verknüpfen, auf die kostenpflichtige Version beschränkt.

Was ist eine API?

Eine API (application programming interface) ist eine Schnittstelle zwischen Softwareprogrammen, die eine Kommunikation und Datenaustausch zwischen ihnen möglich macht.

Wenn Sie beispielsweise eine Mediathek mit Videos von YouTube oder Vimeo erstellen möchten, können Sie die deren APIs verwenden. Die API ermöglicht es, auf auf die Videoplattform zuzugreifen und Videos von dort abzurufen, ohne sie herunterladen oder selbst hosten zu müssen. Die APIs geben auch Zugriff auf Informationen zu den Videos, wie Titel, Bseschreibung und Keywords. Zudem lassen sich Informationen über den Kanal abrufen, der das Video hochgeladen hat, und die Anzahl der Aufrufe, Likes und Kommentare des Videos erhalten.

Insgesamt ist eine API ein nützliches Werkzeug für Entwickler, um Daten und Funktionen von verschiedenen Systemen zu nutzen, ohne alles von Grund auf neu programmieren zu müssen.

Was ist ein API-Key?

Ein API-Key, API-Schlüssel oder API-Token ist ein spezieller Code / Zugangsschlüssel, mit dem man Zugang zu einer API erhält. Er dient dazu, den Zugriff auf die API zu autorisieren und zu kontrollieren.

Wer eine API verwenden möchte, muss sich normalerweise bei dem Anbieter der API registrieren, um einen API-Schlüssel zu erhalten. Der API-Schlüssel ist einzigartig und wird von der API-Plattform generiert. Der Key wird bei einer Anfrage an die API verwendet, um den Zugriff auf die Daten zu autorisieren. API-Schlüssel können auch verwendet werden, um den Zugriff auf bestimmte Funktionen oder Daten innerhalb der API zu beschränken oder zu erweitern.

Insgesamt ist der API-Schlüssel ein wichtiger Mechanismus, um sicherzustellen, dass nur autorisierte Benutzer auf die Daten und Funktionen der API zugreifen können und die Nutzung der API von nicht autorisierten Personen oder Anwendungen verhindert wird.

[1] Es besteht keine Garantie für dauerhafte Verfügbarkeit oder Support der Software. Lizenzinhaber:innen können die Software während der Lizenzlaufzeit verwenden, solange sie offiziell unterstützt wird und verfügbar ist.

Kontaktieren Sie uns

Sie interessieren sich für die TYPO3 Video Extensions sg_youtube und sg_vimeo oder für eines unserer weiteren Produkte? Sie möchten unsere Services in Anspruch nehmen? – Dann kontaktieren Sie uns einfach mit Ihrem Anliegen. Wir freuen uns auf Ihre Nachricht!