Okay, also @imc, dass funktioniert nur, hast du in einer Zeile was doppelt, was zu viel war:
Für das HTML für meine Erweiterung hattest du das so
Code: Alles auswählen
<!-- IF YOUTUBE_BBCODE_SWITCH --><div class="yt_video_layer"></div><!-- ELSE --><div class="yt_video_switch_false">{L_YOUTUBE_ADMIN}</div><!-- ELSE --><div class="yt_video_switch_false">{L_YOUTUBE_ADMIN}</div><!-- ENDIF -->
Korrekt geschrieben so:
Code: Alles auswählen
<!-- IF YOUTUBE_BBCODE_SWITCH -->
<div class="yt_video_layer"></div>
<!-- ELSE -->
<div class="yt_video_switch_false">{L_YOUTUBE_ADMIN}</div>
<!-- ELSE -->
<div class="yt_video_switch_false">{L_YOUTUBE_ADMIN}</div>
<!-- ENDIF -->
Da war einmal Else zu viel, aber kein Problem.
Ich habe dann das Ganze noch angepasst an den Cookie-Manager, weil man in dem Frame aus src data-src machen muss und dann den data-name einfügen muss.
BBCode-Benutzung:
HTML Ersetzung:
Code: Alles auswählen
<!-- IF YOUTUBE_BBCODE_SWITCH -->
<div class="yt_video_layer"></div>
<!-- ELSE -->
<div class="yt_video_switch_false">{L_YOUTUBE_ADMIN}</div>
<!-- ENDIF -->
<script>
var youtubeURL = '{URL}';
var ytVideoAry = document.getElementsByClassName('yt_video_layer');
var ytVideo = ytVideoAry[ytVideoAry.length-1];
var strIdentifier, newYtURL;
if (youtubeURL.includes('watch')) {
const url = new URL(youtubeURL);
const searchParams = new URLSearchParams(url.search);
strIdentifier = searchParams.get('v');
}
else if (youtubeURL.includes('shorts') || youtubeURL.includes('youtu.be')) {
const url = new URL(youtubeURL);
strIdentifier = url.pathname.substring(url.pathname.lastIndexOf('/'));
}
newYtURL = 'https://www.youtube.com/embed/' + strIdentifier;
ytVideo.innerHTML = '<iframe data-name="youtube" data-src="' + newYtURL + '" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>';
</script>
Tipp-Anzeige:
Jetzt gibt es zwei Möglichkeiten.
Man kann hingehen und bei beiden YouTube-BBCodes die HTML‑Ersetzung tauschen, was am einfachsten ist. Dann spielt es keine Rolle, welchen bbcode der Benutzer benutzt.
Eventuell muss man die Foren/Beiträge im ACP resynchronisieren, aber das wäre die unkomplizierteste Lösung.
Alternativ könnte man den youtu.be bbcode löschen, müsste dann aber in der Datenbank die Beiträge mit nachfolgendem Befehl aktualisieren:
Code: Alles auswählen
UPDATE phpbb_posts
SET post_text = REPLACE(post_text, 'youtube_be', 'youtube')
WHERE post_text LIKE '%youtube_be%'
Natürlich, bevor ihr das macht, solltet ihr in jedem Fall ein Backup der Datenbank machen.
Und vielen Dank @imc