Plugin greift nur in erstem Beitrag

13.08.2024 06:35
#1 Plugin greift nur in erstem Beitrag
ms
Mitglied

Guten Morgen zusammen!

Ich habe auf Grundlage des Gif&Quote Plugins von @TWD_Grace etwas experimentiert, denn ich wollte gern das Bild/Gif nicht nur auf dem Profil sondern auch neben dem Beitrag anzeigen lassen. Das hat soweit auch funktioniert.
Dazu habe ich einfach {{message:userid}} statt {{userid}} wie auf dem Mitgliederprofil genutzt.

Der Punkt an dem ich nun allerdings nicht mehr weiter komme, ist: das gif wird nur im First Post/ersten Beitrag angezeigt. In allen darauffolgenden Beiträgen wird es leider nicht geladen.
Ich habe schon sämtliche Konstellationen ausprobiert...

Wird vielleicht allgemein der erste Beitrag eines Themas anders angesprochen als der Rest? Bei Benutzertitel, Username und Co. wird beispielsweise überall ein start und end drum gesetzt. (z.B. {{user_registered==true.start}} und {{user_registered==true.end}}) )
Auch das habe ich bereits versucht - allerdings erfolglos.
Was übersehe ich?


Vielen Dank im Voraus, VG


 Antworten

 Beitrag melden
13.08.2024 10:41 (zuletzt bearbeitet: 13.08.2024 10:50)
avatar  Mike48
#2 RE: Plugin greift nur in erstem Beitrag
avatar
Mitglied

1. Welches Template verwendest du?
2. Welches Template Element verwendest du im Plugin für die Anzeige des Bildes?
3. Wie ist der Code?
4. Hat jeder User ein eigenes Bild?

ich habe meine Glaskugel verloren


www.friends-of-xobor.de (621181 - V4 Template)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)

 Antworten

 Beitrag melden
13.08.2024 13:27
#3 RE: Plugin greift nur in erstem Beitrag
ms
Mitglied

Wir benutzen das Gaia Template. Die Profilinformation die mittels Plugin ausgegeben werden, werden ins Template Thread Flat eingefügt um neben dem Beitrag angezeigt werden zu können.
Ja, jeder User kann ein eigenes Bild einstellen. Wenn nicht wird auf einen Platzhalter zurück gegriffen. :)

Es wurden davaVars angelegt, die soweit auch funktionieren. Aber eben nur im ersten Beitrag.

Das hier sind die Codes die verwendet wurden:

Template "Einstellungen - Profil editieren":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
<br>
<hr>
<table width="99%">
<tr>
<td><b class="grey">Gif</b> <br><i><small>(URL des Gifs einfügen)</small></i></td>
<td width="75%">
<input type="text" style="width: 99%;" class="inputbox" id="theglobal2" name="profile_gif">
</td>
</tr>
<tr>
<td><b class="grey">Quote</b></td>
<td width="75%">
<input type="text" style="width: 99%;" class="inputbox" id="theglobal" name="profile_quote">
</td>
</tr>
</table>
<br>
 
<script>
document.addEventListener('DOMContentLoaded', function() {
 
const MAX_LENGTH = 4096; // Maximale Anzahl der Zeichen
 
function saveGlobal(newval, datavar) {
console.log("saveGlobal userid: {{user_id}} newval: " + newval);
var encodedVal = encodeHtmlEntities(newval); // HTML-Entities kodieren
xobor.plugin("gifandquotillumi").setDataVar(datavar, 3, '{{user_id}}', encodedVal, function(res) {
console.log("Globale Variable '" + datavar + "' speichern: " + res);
});
}
 
function loadGlobal(datavar, inputId) {
xobor.plugin("gifandquotillumi").getDataVar(datavar, 3, '{{user_id}}', function(res) {
if (res) {
var decodedVal = decodeHtmlEntities(res); // HTML-Entities dekodieren
document.getElementById(inputId).value = decodedVal;
}
});
}
 
// Laden der Werte beim Laden der Seite
loadGlobal('profil_gif_datavar', 'theglobal2');
loadGlobal('profile_quote_datavar', 'theglobal');
 
// Event Listener für Änderungen in den Eingabefeldern
document.getElementById('theglobal2').addEventListener('input', function() {
var newval = this.value;
saveGlobal(newval, 'profil_gif_datavar');
});
 
document.getElementById('theglobal').addEventListener('input', function() {
var newval = this.value;
if (newval.length > MAX_LENGTH) {
alert(`Die maximale Zeichenanzahl von ${MAX_LENGTH} Zeichen wurde erreicht. Die zusätzlichen Zeichen wurden entfernt.`);
newval = newval.substring(0, MAX_LENGTH);
this.value = newval;
}
saveGlobal(newval, 'profile_quote_datavar');
});
 
// Funktion zum Kodieren von HTML-Entities
function encodeHtmlEntities(text) {
var textArea = document.createElement('textarea');
textArea.textContent = text;
return textArea.innerHTML;
}
 
// Funktion zum Dekodieren von HTML-Entities
function decodeHtmlEntities(text) {
var textArea = document.createElement('textarea');
textArea.innerHTML = text;
return textArea.textContent;
}
 
});
 
</script>
 
 




Template Mitglieder Profil:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
 
<div id="image-container"></div>
 
<div id="quoteContainer" style="max-width: 290px; overflow-wrap: break-word; word-wrap: break-word;">
<div id="quoteText"></div>
</div>
<br>
{{user_admin==true.start}}
<button id="myCustomButtonGif" style="display: none;">Gif löschen</button>
<button id="myCustomButtonGifEdit" style="display: none;">Gif bearbeiten</button>
{{user_admin==true.end}}
 
<br>
{{user_admin==true.start}}
<button id="myCustomButtonQuote" style="display: none;">Quote löschen</button>
<button id="myCustomButtonQuoteEdit" style="display: none;">Quote bearbeiten</button>
<button id="myCustomButtonQuoteSave" style="display: none;">Änderungen speichern</button>
{{user_admin==true.end}}
 
<div id="quoteInputContainer" style="display: none;">
<textarea style="width: 100%; max-width: 300px; box-sizing: border-box;" class="inputbox" id="theglobal2" name="profile_quote"></textarea>
</div>
 
<div id="gifInputContainer" style="display: none;">
<textarea style="width: 100%; max-width: 300px; box-sizing: border-box;" class="inputbox" id="theglobalGif" name="profile_gif"></textarea>
<button id="myCustomButtonGifSave" style="display: none;">Änderungen speichern</button>
</div>
 
<br>
<br>
<hr id="conditionalHr" style="display: none;">
 

<script>
document.addEventListener('DOMContentLoaded', function() {
let gifExists = false;
let quoteExists = false;
 
// Funktion zur Anzeige der Gif-Daten
function showGif() {
xobor.plugin("gifandquotillumi").getDataVar('profil_gif_datavar', 3, '{{userid}}', function(res) {
if (res) {
showImage(res);
gifExists = true;
 
// Zeigt die Lösch- und Bearbeitungs-Buttons an, falls der Benutzer Admin ist
var gifButton = document.getElementById('myCustomButtonGif');
var gifEditButton = document.getElementById('myCustomButtonGifEdit');
if (gifButton && gifEditButton) {
gifButton.style.display = 'inline-block';
gifEditButton.style.display = 'inline-block';
}
} else {
// Standard-Platzhalterbild anzeigen, wenn kein GIF vorhanden ist
showImage('https://i.ibb.co/jbmJYKj/GifQuote.png');
}
checkElements();
});
}
 
// Funktion zur Anzeige eines Bildes
function showImage(url) {
var img = new Image();
img.onload = function() {
img.className = 'loaded-image';
img.alt = 'Profilbild';
var container = document.getElementById('image-container');
container.innerHTML = '';
container.appendChild(img);
};
 
img.onerror = function() {
console.error('Fehler beim Laden des Bildes: ' + url);
document.getElementById('image-container').innerHTML = '';
};
 
img.src = url;
}
 
// Funktion zur Anzeige der Zitat-Daten
function showQuote() {
xobor.plugin("gifandquotillumi").getDataVar('profile_quote_datavar', 3, '{{userid}}', function(res) {
if (res) {
var quoteText = document.getElementById('quoteText');
var decodedText = decodeHtmlEntities(res);
quoteText.innerHTML = decodedText.replace(/\n/g, '<br>');
quoteExists = true;
 
// Zeigt die Lösch- und Bearbeitungs-Buttons an, falls der Benutzer Admin ist
var quoteButton = document.getElementById('myCustomButtonQuote');
var quoteEditButton = document.getElementById('myCustomButtonQuoteEdit');
if (quoteButton && quoteEditButton) {
quoteButton.style.display = 'inline-block';
quoteEditButton.style.display = 'inline-block';
}
 
document.getElementById('quoteContainer').style.display = 'block';
}
checkElements();
});
}
 
// Funktion zum Dekodieren von HTML-Entities
function decodeHtmlEntities(text) {
var textArea = document.createElement('textarea');
textArea.innerHTML = text;
return textArea.value;
}
 
// Überprüfung, ob Elemente angezeigt werden sollen
function checkElements() {
var hrElement = document.getElementById('conditionalHr');
if (!gifExists && !quoteExists) {
hrElement.style.display = 'none';
} else {
hrElement.style.display = 'block';
}
}
 
// Event-Listener für Admin-Buttons hinzufügen (falls vorhanden)
var gifButton = document.getElementById('myCustomButtonGif');
var gifEditButton = document.getElementById('myCustomButtonGifEdit');
var quoteButton = document.getElementById('myCustomButtonQuote');
var quoteEditButton = document.getElementById('myCustomButtonQuoteEdit');
var quoteSaveButton = document.getElementById('myCustomButtonQuoteSave');
var gifSaveButton = document.getElementById('myCustomButtonGifSave');
 
if (gifButton) {
gifButton.addEventListener('click', function() {
var confirmation = confirm('Sind Sie sicher, dass Sie das Gif löschen wollen?');
if (confirmation) {
xobor.plugin("gifandquotillumi").delDataVar('profil_gif_datavar', 3, '{{userid}}', function(success) {
if (success) {
alert('Das Gif wurde gelöscht!');
gifExists = false;
document.getElementById('image-container').innerHTML = '';
gifButton.style.display = 'none';
gifEditButton.style.display = 'none';
checkElements();
} else {
alert('Fehler beim Löschen der Daten.');
}
});
} else {
alert('Löschvorgang abgebrochen.');
}
});
}
 
if (gifEditButton) {
gifEditButton.addEventListener('click', function() {
// Verstecke das bestehende Bild und zeige das Textfeld an
var imageContainer = document.getElementById('image-container');
var gifInputContainer = document.getElementById('gifInputContainer');
var gifSaveButton = document.getElementById('myCustomButtonGifSave');
 
if (imageContainer) {
var currentGif = imageContainer.querySelector('img');
if (currentGif) {
document.getElementById('theglobalGif').value = currentGif.src;
}
}
 
imageContainer.style.display = 'none';
gifInputContainer.style.display = 'block';
gifSaveButton.style.display = 'inline-block';
});
}
 
if (gifSaveButton) {
gifSaveButton.addEventListener('click', function() {
var newGifUrl = document.getElementById('theglobalGif').value;
if (confirm('Möchten Sie die Änderungen speichern?')) {
xobor.plugin("gifandquotillumi").setDataVar('profil_gif_datavar', 3, '{{userid}}', newGifUrl, function(success) {
if (success) {
alert('Das Gif wurde aktualisiert!');
var imageContainer = document.getElementById('image-container');
var gifInputContainer = document.getElementById('gifInputContainer');
imageContainer.innerHTML = ''; // Clear the container
showImage(newGifUrl);
imageContainer.style.display = 'block';
gifInputContainer.style.display = 'none';
gifSaveButton.style.display = 'none';
} else {
alert('Fehler beim Speichern der Daten.');
}
});
} else {
alert('Änderungen wurden nicht gespeichert.');
}
});
}
 
if (quoteButton) {
quoteButton.addEventListener('click', function() {
var confirmation = confirm('Sind Sie sicher, dass Sie das Zitat löschen wollen?');
if (confirmation) {
xobor.plugin("gifandquotillumi").delDataVar('profile_quote_datavar', 3, '{{userid}}', function(success) {
if (success) {
alert('Das Zitat wurde gelöscht!');
quoteExists = false;
document.getElementById('quoteText').innerHTML = '';
quoteButton.style.display = 'none';
quoteEditButton.style.display = 'none';
quoteSaveButton.style.display = 'none';
checkElements();
} else {
alert('Fehler beim Löschen der Daten.');
}
});
} else {
alert('Löschvorgang abgebrochen.');
}
});
}
 
if (quoteEditButton) {
quoteEditButton.addEventListener('click', function() {
// Verstecke das bestehende Zitat und zeige das Textfeld an
var quoteText = document.getElementById('quoteText');
var quoteInputContainer = document.getElementById('quoteInputContainer');
var quoteSaveButton = document.getElementById('myCustomButtonQuoteSave');
 
if (quoteText) {
var currentQuote = quoteText.innerText || quoteText.textContent;
document.getElementById('theglobal2').value = currentQuote;
}
 
quoteText.style.display = 'none';
quoteInputContainer.style.display = 'block';
quoteSaveButton.style.display = 'inline-block';
});
}
 
if (quoteSaveButton) {
quoteSaveButton.addEventListener('click', function() {
var newQuote = document.getElementById('theglobal2').value;
if (confirm('Möchten Sie die Änderungen speichern?')) {
xobor.plugin("gifandquotillumi").setDataVar('profile_quote_datavar', 3, '{{userid}}', newQuote, function(success) {
if (success) {
alert('Das Zitat wurde aktualisiert!');
var quoteText = document.getElementById('quoteText');
var quoteInputContainer = document.getElementById('quoteInputContainer');
quoteText.innerHTML = newQuote.replace(/\n/g, '<br>');
quoteText.style.display = 'block';
quoteInputContainer.style.display = 'none';
quoteSaveButton.style.display = 'none';
} else {
alert('Fehler beim Speichern der Daten.');
}
});
} else {
alert('Änderungen wurden nicht gespeichert.');
}
});
}
 
showGif();
showQuote();
});
</script>
 
<style>
.loaded-image {
max-width: 300px;
max-height: 150px;
object-fit: cover;
}
 
#myCustomButtonGif, #myCustomButtonQuote, #myCustomButtonGifEdit, #myCustomButtonQuoteEdit, #myCustomButtonQuoteSave, #myCustomButtonGifSave {
background-color: {{global_post_bg}};
border: none;
color: {{global_link_color}};
padding: 2px 5px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 12px;
margin: 2px;
cursor: pointer;
border-radius: 5px;
height: 18px;
width: 135px;
margin: 5px;
}
 
#myCustomButtonGif:hover, #myCustomButtonQuote:hover, #myCustomButtonGifEdit:hover, #myCustomButtonQuoteEdit:hover, #myCustomButtonQuoteSave:hover, #myCustomButtonGifSave:hover {
background-color: {{global_button_bg_hover}};
}
 
#quoteInputContainer textarea, #gifInputContainer textarea {
max-width: 300px;
width: 100%;
box-sizing: border-box;
resize: vertical; /* Ermöglicht das Vergrößern der Höhe */
border: 1px solid {{global_button_border}};
}
</style>
 

 




Template Thread Flat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
<div id="image-container-threadflat"></div>
 
<script>
document.addEventListener('DOMContentLoaded', function() {
// Funktion zur Anzeige des Gif im Thread Flat Template
function showGifInThreadFlat() {
xobor.plugin("gifandquotillumi").getDataVar('profil_gif_datavar', 3, '{{message:userid}}', function(res) {
if (res) {
showImageInThreadFlat(res);
} else {
// Standard-Platzhalterbild anzeigen, wenn kein GIF vorhanden ist
showImageInThreadFlat('https://i.ibb.co/jbmJYKj/GifQuote.png');
}
});
}
 
// Funktion zur Anzeige eines Bildes im Thread Flat Template
function showImageInThreadFlat(url) {
var img = new Image();
img.onload = function() {
img.className = 'loaded-image';
img.alt = 'Profilbild';
var container = document.getElementById('image-container-threadflat');
container.innerHTML = '';
container.appendChild(img);
};
 
img.onerror = function() {
console.error('Fehler beim Laden des Bildes: ' + url);
document.getElementById('image-container-threadflat').innerHTML = '';
};
 
img.src = url;
}
 
// Das GIF im Thread Flat anzeigen
showGifInThreadFlat();
});
</script>
 


 Antworten

 Beitrag melden
13.08.2024 15:11
avatar  Mike48
#4 RE: Plugin greift nur in erstem Beitrag
avatar
Mitglied

Das nächste Mal bitte den Code noch in einen Spoiler packen.


www.friends-of-xobor.de (621181 - V4 Template)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)

 Antworten

 Beitrag melden
13.08.2024 16:09
#5 RE: Plugin greift nur in erstem Beitrag
ms
Mitglied

Natürlich gerne, tut mir leid. Ich werde es beim nächsten Mal beachten! :3


Ich habe auch noch ein bisschen mehr ausprobiert und kann mittlerweile sagen, dass es wahrscheinlich nicht direkt an meinem genutzten {{message:userid}} liegt, denn wenn ich dieses durch etwa {{userinfobox:postid}} und oder {{userinfobox:userid}} verwende, wird es ebenso angezeigt.
Es muss also meines Laien-Wissens nach wirklich etwas mit dem First Post zu tun haben.
Wenn man sich das Template ansieht, sieht man allerdings, dass dort nur einmal der Beitrag definiert wird und nicht etwa erst der First Post und dann noch einmal alle anderen.


 Antworten

 Beitrag melden
13.08.2024 16:24
avatar  Mike48
#6 RE: Plugin greift nur in erstem Beitrag
avatar
Mitglied

Um alle Beiträge zu bearbeiten muss man entweder ein Inline-Element nehmen oder mit einer Schleife nachträglich alle Beiträge durchlaufen.

1
2
3
4
5
 

{{message.startlist}}
/* Code der in jedem Beitrag ausgeführt wird */
{{message.end}}
 
 



Im Inline-Element thread_after_message zum Beispiel wird der Code am Ende jeden Beitrags ausgeführt.

Ich würde fürs Profil ein neues Feld in den Profil-Optionen erstellen statt einer DataVar. .
Das hat den Vorteil, dass man darauf direkt zugreifen kann ohne für jeden Beitrag ein getDataVar abzusetzen.
In dieses Feld können die User den Link zur Grafik einstellen.


www.friends-of-xobor.de (621181 - V4 Template)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)

 Antworten

 Beitrag melden
13.08.2024 17:09
#7 RE: Plugin greift nur in erstem Beitrag
ms
Mitglied

Das war es! Vielen Dank!


 Antworten

 Beitrag melden
Bereits Mitglied?
Jetzt anmelden!
Mitglied werden?
Jetzt registrieren!