Prüft, ob für einen Service bereits Consent vorliegt.
consent_manager_hasconsent(serviceKey);Parameter:
serviceKey(string): Der Service-Schlüssel (z.B.youtube,google-analytics)
Rückgabewert:
truewenn Consent erteilt wurdefalsewenn kein Consent vorliegt
Beispiel:
if (typeof consent_manager_hasconsent === 'function' && consent_manager_hasconsent('google-analytics')) {
console.log('Google Analytics ist aktiv');
}Öffnet den Consent-Dialog manuell.
consent_manager_showBox();Typischerweise nicht direkt nötig, wenn Links mit data-consent-action="settings" verwendet werden.
Ältere Beispiele mit ConsentManagerCore oder doConsent() als Frontend-JS-API sind nicht mehr der aktuelle Standard für den globalen Consent-Dialog. Für den Dialog bitte die oben genannten Funktionen und Events verwenden.
Die PHP-API besteht aus mehreren Klassen mit unterschiedlichen Aufgaben.
Die Klasse Frontend ist die zentrale Integrationsklasse für Templates.
use FriendsOfRedaxo\ConsentManager\Frontend;Standard-Einstieg für die Ausgabe im Frontend:
echo Frontend::getFragment(0, 0, 'ConsentManager/box_cssjs.php');Parameter:
$forceCache(int): Cache-Verhalten (0normal,1neu schreiben)$forceReload(int): Seite nach Consent-Änderung neu laden (0/1)$fragmentFilename(string): Fragment-Datei
Wie getFragment(), aber mit zusätzlichen Variablen für Custom-Fragmente.
echo Frontend::getFragmentWithVars(0, 0, 'ConsentManager/box_cssjs.php', [
'customClass' => 'my-consent-box'
]);Lädt Domain-spezifische Daten (Links, Services, Gruppen, Texte) in die Instanz.
$frontend = new Frontend();
$frontend->setDomain('beispiel.de');Nach setDomain() stehen u. a. diese Properties zur Verfügung:
$frontend->links['privacy_policy']$frontend->links['legal_notice']$frontend->cookiegroups$frontend->cookies$frontend->texts
Hilfsfunktionen für Consent-Checks und Domain-Informationen.
use FriendsOfRedaxo\ConsentManager\Utility;Prüft, ob ein Service bereits akzeptiert wurde.
if (Utility::has_consent('youtube')) {
// Consent vorhanden
}Prüft, ob für die aktuelle Host-Konstellation eine nutzbare Consent-Konfiguration existiert.
if (!Utility::consentConfigured()) {
// ggf. Fallback oder Hinweis
}hostname(): liefert den aktuellen Host inkl. Subdomain (domain-spezifischer Consent)get_domaininfo($url): zerlegt eine URL in Domain-Bestandteile
Statischer Zugriff auf den aufgebauten Addon-Cache.
use FriendsOfRedaxo\ConsentManager\ConsentManager;Wichtige Methoden:
getCache()getDomains()/getDomain($domain)getCookieGroups(?int $clangId = null)getCookies(?int $clangId = null)getTexts(?int $clangId = null)getCookieData(string $uid, ?int $clangId = null)getPlaceholderData(string $uid, ?int $clangId = null)
Beispiel:
$domain = ConsentManager::getDomain('beispiel.de');
$cookies = ConsentManager::getCookies();Die InlineConsent Klasse bietet Methoden zur automatischen Blockierung von externen Inhalten.
use FriendsOfRedaxo\ConsentManager\InlineConsent;Scannt HTML-Code und ersetzt blockierbare Elemente durch Consent-Platzhalter.
$html = '<iframe src="https://www.youtube.com/embed/VIDEO_ID"></iframe>';
$processedHtml = InlineConsent::scanAndReplaceConsentElements($html);Parameter:
$content(string): HTML-Code zum Scannen
Rückgabewert:
- (string): Verarbeiteter HTML-Code mit Consent-Platzhaltern
Unterstützte Dienste:
- YouTube (
youtube.com,youtu.be) - Vimeo (
vimeo.com,player.vimeo.com) - Google Maps (
google.com/maps,maps.google.com)
Erzeugt einen Consent-Platzhalter für YouTube Videos.
$placeholder = InlineConsent::renderYouTubePlaceholder(
'VIDEO_ID',
['title' => 'Mein Video']
);Parameter:
$videoId(string): YouTube Video-ID$options(array): Optionale Konfigurationtitle: Custom Titelprivacy_notice: Custom Textprovider: Anbieter-Nameprivacy_url: Link zur Datenschutzerklärung
Erzeugt einen Consent-Platzhalter für Vimeo Videos.
$placeholder = InlineConsent::renderVimeoPlaceholder(
'VIDEO_ID',
['title' => 'Vimeo Video']
);Erzeugt einen Consent-Platzhalter für Google Maps.
$placeholder = InlineConsent::renderGoogleMapsPlaceholder(
'EMBED_URL',
['title' => 'Standortkarte']
);Erzeugt einen generischen Consent-Platzhalter.
$placeholder = InlineConsent::renderGenericPlaceholder(
'custom-service',
'<div>Original Content</div>',
[
'title' => 'Externer Dienst',
'privacy_notice' => 'Für die Anzeige wird Ihre Zustimmung benötigt.',
'provider' => 'Anbieter GmbH',
'privacy_url' => 'https://example.com/privacy'
]
);Endpoint: /index.php?rex-api-call=consent_stats
Methode: GET
Authentifizierung: Backend-User muss eingeloggt sein
Antwort:
{
"success": true,
"total": 1234,
"top_services": [
{"service": "youtube", "count": 450},
{"service": "google-analytics", "count": 320}
],
"history": [
{"date": "2025-01-26", "count": 45},
{"date": "2025-01-25", "count": 38}
]
}Beispiel:
fetch('?rex-api-call=consent_stats')
.then(response => response.json())
.then(data => {
console.log('Total Consents:', data.total);
});Wird aufgerufen, bevor der Consent-Manager im Frontend ausgegeben wird.
rex_extension::register('CONSENT_MANAGER_BEFORE_OUTPUT', function($ep) {
$config = $ep->getSubject();
// Konfiguration anpassen
return $config;
});Ermöglicht die Anpassung von Inline-Platzhaltern.
rex_extension::register('CONSENT_MANAGER_INLINE_PLACEHOLDER', function($ep) {
$params = $ep->getParams();
$serviceKey = $params['serviceKey'];
$content = $params['content'];
// Custom Platzhalter zurückgeben
if ($serviceKey === 'custom-service') {
return '<div>Custom Placeholder</div>';
}
});Der Consent Manager löst folgende Custom Events im Browser aus:
Wird ausgelöst, wenn der Consent Manager initialisiert wurde.
document.addEventListener('consent_manager-ready', function (e) {
if (!e.detail.initialized) {
console.warn('Consent Manager nicht bereit:', e.detail.reason);
return;
}
console.log('Consent Manager ready');
});Wird ausgelöst, wenn eine Consent-Auswahl gespeichert wurde.
document.addEventListener('consent_manager-saved', function (e) {
var consents = JSON.parse(e.detail);
console.log('Gespeicherte Consents:', consents);
});Wird ausgelöst, wenn der Dialog geöffnet wurde.
document.addEventListener('consent_manager-show', function () {
console.log('Consent-Dialog geöffnet');
});Wird ausgelöst, wenn der Dialog geschlossen wurde.
document.addEventListener('consent_manager-close', function () {
console.log('Consent-Dialog geschlossen');
});Der Consent Manager unterstützt automatisch Google Consent Mode v2.
Konfiguration:
In Consent Manager → Einstellungen → Google Consent Mode aktivieren.
Verfügbare Consent-Typen:
ad_storage: Werbe-Cookiesanalytics_storage: Analytics-Cookiesad_user_data: Nutzerdaten für Werbungad_personalization: Personalisierte Werbungfunctionality_storage: Funktionale Cookiespersonalization_storage: Personalisierungs-Cookiessecurity_storage: Sicherheits-Cookies
Beispiel - Service mit Google Consent Mode verknüpfen:
# In Service-Definition (Cookie → Definitions YAML)
gcm_purposes:
- analytics_storage
- ad_storageServices und Einstellungen können als JSON exportiert werden:
$config = rex_config::get('consent_manager');
$json = json_encode($config, JSON_PRETTY_PRINT);$data = json_decode($json, true);
foreach ($data as $key => $value) {
rex_config::set('consent_manager', $key, $value);
}if (typeof consent_manager_hasconsent === 'function' && consent_manager_hasconsent('google-analytics')) {
loadGoogleAnalytics();
}<iframe
data-consent-block="true"
data-consent-service="youtube"
data-consent-title="YouTube Video"
src="https://www.youtube.com/embed/VIDEO_ID">
</iframe>Gruppieren Sie verwandte Services (z.B. alle Google-Dienste) in Cookie-Gruppen für bessere UX.
Verwenden Sie Video-Thumbnails für YouTube/Vimeo Platzhalter zur besseren User Experience.
In Version 5.3.0 wurde das System auf einen Framework-First Ansatz umgestellt. Dies ermöglicht es, die Consent-Box nativ in Ihrem Framework (Bootstrap, UIkit, Tailwind, etc.) zu rendern, ohne dass das Addon eigenes CSS mitbringen muss.
Um ein eigenes Framework zu unterstützen, sind folgende Schritte notwendig:
Fügen Sie in der Datei pages/config.php den neuen Framework-Identifier (z.B. my-framework) zum Select-Feld css_framework_mode hinzu.
Erstellen Sie ein neues Fragment unter:
fragments/ConsentManager/box_my-framework.php
Dieses Fragment wird automatisch von fragments/ConsentManager/box.php geladen, wenn der Modus auf my-framework steht. Nutzen Sie hier die nativen Klassen Ihres Frameworks. Die Standardvariablen (Textinhalte, Services) stehen im Fragment zur Verfügung.
Beispiel Struktur eines Sub-Fragments:
<?php
/** @var rex_fragment $this */
$is_modern = true; // Empfohlen für neue Integrationen
?>
<!-- HTML Struktur Ihres Frameworks -->
<div class="my-modal">
<h3><?= $this->getVar('headline') ?></h3>
<p><?= $this->getVar('description') ?></p>
<!-- Buttons etc -->
</div>Damit User Ihr Framework direkt beim Onboarding wählen können, erweitern Sie:
fragments/ConsentManager/setup_wizard.php(UI Karte hinzufügen)lib/Api/consent_manager_setup_wizard.php(Validierung anpassen)
Fügen Sie die entsprechenden Übersetzungen für den Namen des Frameworks in den .lang Dateien hinzu:
consent_manager_config_css_framework_mode_my-framework = My Framework
Lösung: Prüfen Sie, ob Cookies im Browser aktiviert sind und ob die Domain korrekt konfiguriert ist.
Lösung: Stellen Sie sicher, dass consent_inline.js geladen wird und das data-consent-block="true" Attribut gesetzt ist.
Lösung: Service muss unter Consent Manager → Services angelegt und aktiviert sein.
Bei Fragen oder Problemen:
- GitHub Issues: https://github.com/FriendsOfREDAXO/consent_manager/issues
- REDAXO Slack: #addon-consent-manager
- Forum: https://redaxo.org/support/community/