Bitte geben Sie einen Grund für die Verwarnung an
Der Grund erscheint unter dem Beitrag.Bei einer weiteren Verwarnung wird das Mitglied automatisch gesperrt.
Array speichern in dataVar ergibt Object
#1 Array speichern in dataVar ergibt Object
Hallo @Ingmar
Wenn ich ein Array in eine dataVar speichere kommt bein lesen immer ein Object zurück.
testArray = ["Wert1","Wert2","Wert3","Wert4"];
Speichern mit getDataVar.
Nach getDataVar habe ich aber ein Object statt Array
{"0":"Wert1","1":"Wert2","2":"Wert3","3":"Wert4"}
Ist das ein Bug?
Wie kann man erreichen dass nach dem getDataVar wieder ein Array vorhanden ist?
Edit:
Wenn ich das Array aber in ein Object setze dann bleibt es erhalten.
testArray = {
array: ["Wert1","Wert2","Wert3","Wert4"]
}
Dann habe ich nach getDataVar wieder ein Array, aber im Object
testArray .array // ["Wert1","Wert2","Wert3","Wert4"]
www.friends-of-xobor.de (621181 - Template kann wechsel bei Pluin Tests)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)
Interessant. Da müsste ich selbst nachschauen, ob das ein Fehler oder so gewollt ist.
Unabhängig davon lässt sich das vermutlich schlecht ändern, da sonst ja alte Plugins ggf. nicht funktionieren.
Du kannst dir das recht einfach zwischen Object und Array umwandeln wie du es brauchst...
2
3
4
5
6
7
8
function toArray(_Object){
var _Array = new Array();
for(var name in _Object){
_Array[name] = _Object[name];
}
return _Array;
}
2
3
4
5
6
7
function toObject(_Array){
var _Object = new Object();
for(var key in _Array){
_Object[key] = _Array[key];
}
return _Object;
}
geklaut von hier: https://www.hiren.dev/2011/10/convert-ja...-object-to.html
#3 RE: Array speichern in dataVar ergibt Object
Ich werde es wahrscheinlich so machen, daß ich das Array vor dem Speichern in ein Objekt packe und beim Einlesen wieder aus dem Object hole.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var array_1 = [];
var arrayobj = {
'array':[]
};
for(i=0; i<4; i++) {
array_1.push("Wert_"+i); // Array fuellen
}
arrayobj.array = array_1; // Array in Object packen und speichern
xobor.plugin('mike48test1a').setDataVar('userdata', 5, tuserID, arrayobj, function(res) {
console.log("Plugin Variablentest - array_1 gespeichert: " + res);
});
xobor.plugin('mike48test1a').getDataVar('userdata', 5, tuserID, function(res) {
array_1 = res.array; // Array aus Object holen
});
array_1.push("neuerEintrag1"); // mit Array Methode Eintrag einfuegen
So brauche ich nur bei setDataVar und getDataVar etwas Code ergänzen und kann die Array-Methoden wie gehabt verwenden.
Ich hatte bisher auch Schleifen benutzt um beim getDataVar wieder Arrays aus den Objecten zu machen.
Das ist aber umständlich und benötigt Zeit. Ich dachte, ich hätte mir das sparen können.
Es gab aber immer zusätzliche Problem wenn das Array mal leer war.
Die Lösung die jetzt gefunden habe löst das Problem auch und ist schneller.
www.friends-of-xobor.de (621181 - Template kann wechsel bei Pluin Tests)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)
Hi @Mike48
Der Thread ist zwar schon ein paar Jahre alt, doch ich hoffe ich bin hier trotzdem mit meiner Frage richtig.
Ich versuche ein Plugin zu schreiben, womit man eine Freundesliste anlegen kann. Wenn man (aktuell noch per ID und nicht Nutzernamen) die ID in das erste Textfeld eingibt, kann man das Profilbild samt verlinkten Usernamen aufrufen und dazu noch eine Kontaktbeschreibung abgeben. Später sollen diese Daten auch im Profil erscheinen, der Code aktuell ist aus "Einstellungen - Profil editieren"
Da man natürlich mehr als nur einen Kontakt hat, habe ich einen Array erstellt und es funktioniert auch wunderbar, dass man mehrere Kontakte eintippt, die dann in der Übersicht angezeigt werden. Aktuell speichert es nur noch nicht, da ich es nicht hinkriege den Array in einer DataVariable zu speichern.
Mit "localStorage.setItem('KontaktArray', JSON.stringify(KontaktArray));" hat es gut funktioniert, aber es ist eben dann lokal, was nicht Sinn und Zweck der Sache ist, aber es hat mir wenigstens schon einmal gezeigt, dass es generell funktioniert, sobald das speichern und aufrufen klappt
Aktuell suche ich gerade also nach einer Lösung wie ich einen Array in einer DataVariable speichern kann, um es später auch zum Mitglieder Profil zu übertragen. Mit diesen Code hier von dir mit dem Object habe ich es auch versucht, doch allein das Speichern klappt bei mir irgendwie gerade nicht (weswegen auch das getDataVar fehlt, da sonst nichts mehr angezeigt wird).
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
<script>
document.addEventListener('DOMContentLoaded', function() {
let KontaktArray = [];
// Funktion zum Anzeigen der Kontakte im contactsOutput
function displayContacts() {
const contactsOutput = document.getElementById('contactsOutput');
contactsOutput.innerHTML = ""; // Clear previous content
KontaktArray.forEach(function(contact) {
contactsOutput.innerHTML += `
<div style="background-color: {{global_profile_left}}; border: 2px dotted {{global_input_border}}; border-radius: 10px; display: flex; align-items: flex-start; min-height: 170px; padding: 10px; width: 1097px; margin-bottom: 10px; position: relative; flex-wrap: nowrap;">
<div style="text-align: left; display: flex;">
<img src="${contact.userImage}" style="height: 150px; width: 125px; object-fit: cover; margin-right: 15px; border-radius: 10px;" onerror="this.onerror=null; this.src='https://i.imgur.com/exUMXt7.png';" >
<div style="max-width: calc(100% - 140px);">
<a href="${contact.userLink}" style="font-family: 'Pirates of Cydonia'; font-size: 25px; color: {{global_link_color}}; text-decoration: none; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">${contact.uname}</a>
<p style="white-space: normal; overflow-wrap: break-word;">${contact.description}</p>
</div>
</div>
</div>
`;
});
// Show contactsContainer if there are contacts
const contactsContainer = document.getElementById('contactsContainer');
contactsContainer.style.display = KontaktArray.length > 0 ? 'block' : 'none';
}
// Event listener für den Button
document.getElementById("myCustomButtonSafe").addEventListener("click", function(event) {
event.preventDefault();
// Wert aus dem Textfeld holen
const inputValue = document.getElementById("inputField").value.trim();
if (inputValue) {
// Plugin-Aufruf, um Benutzerdaten zu erhalten
xobor.plugin("contactoverview").getDeep({ target_id: inputValue, target_type: "3" }, function(userData) {
let uname = userData.uname || "Unbekannter Name";
let userLink = userData.user_link || "";
let userImage = userData.userimage || "Kein Bild verfügbar";
const feedbackMessage = document.getElementById("feedbackMessage");
const descriptionField = document.getElementById("inputField2");
const conDescrib = descriptionField.value.trim();
if (uname === "Unbekannter Name") {
feedbackMessage.style.color = "red";
feedbackMessage.textContent = "Dieser Benutzer hat keinen gültigen Link. Der Kontakt wird nicht gespeichert.";
setTimeout(() => { feedbackMessage.textContent = ""; }, 3000);
return;
}
let combinedString = {
uname: uname,
userLink: userLink,
userImage: userImage,
description: conDescrib
};
// Kontakt speichern
KontaktArray.push(combinedString);
// Kontakte anzeigen
displayContacts();
// Textfeld nach dem Speichern leeren
document.getElementById("inputField").value = '';
document.getElementById("inputField2").value = '';
let Laenge = KontaktArray.length;
var arrayobj = {
'array':[]
};
for(i=0; i < Laenge; i++) {
KontaktArray.push("Wert_"+i); // Array fuellen
}
arrayobj.array = KontaktArray; // Array in Object packen und speichern
xobor.plugin('contactoverview').setDataVar('contacts_text_datavar', 3, '{{userid}}', arrayobj, function(res) {
console.log("Plugin Variablentest - KontaktArray gespeichert: " + res);
});
});
}
});
});
</script>
Zudem funktioniert bei mir die for Schleife auch nicht wirklich, da werden Platzhalter mit reingespielt, die nicht sein sollten. Allerdings wüsste ich gerade auch nicht, wie man das anders lösen kann bzw wo der Fehler liegt.
Kannst du mir da helfen, wie du es damals gelöst hast oder kennst du einen anderen Lösungsweg für mich?
Vielen Dank und Grüße
PS: Falls sich jemand anderes angesprochen fühlt und mit helfen kann, ich bin über jegliche Hilfe froh
#5 RE: Array speichern in dataVar ergibt Object
Zitat von TWD_Grace im Beitrag #4
Mit "localStorage.setItem(\'KontaktArray\', JSON.stringify(KontaktArray));" hat es gut funktioniert, aber es ist eben dann lokal, was nicht Sinn und Zweck der Sache ist, aber es hat mir wenigstens schon einmal gezeigt, dass es generell funktioniert, sobald das speichern und aufrufen klappt
localstore und sessionstore darf in einem Plugin nur über die API erfelgen.
Siehe https://www.xobor.de/plugin-doc-api.html
Mit dem Rest muss ich mich noch beschäftigen.
www.friends-of-xobor.de (621181 - Template kann wechsel bei Pluin Tests)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)
#6 RE: Array speichern in dataVar ergibt Object
Welche Consolen Meldungen gibt es dann beim speichern der dataVar?
Ich würde es so machen
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let Kontakte = {
KontaktArray: []
}
let combinedString = {
uname: uname,
userLink: userLink,
userImage: userImage,
description: conDescrib
};
// Kontakt speichern
KontaktArray.push(combinedString);
xobor.plugin('contactoverview').setDataVar('contacts_text_datavar', 3, '{{user_id}}', Kontakte, function(res) {
console.log("Plugin Variablentest - KontaktArray gespeichert: " + res);
});
Für die Variable würde ich erst ein Object (Kontakte{ }) erstellen in dem dann das Array ( KontaktArray[ ] ) ist mit den Objekten (combinedString{ } ) der User.
Beim getDataVar kann man sonst nicht die Array Methoden anwenden.
Lesen dann mit
Kontakte.KontaktArray[idx].uname
Kontakte.KontaktArray[idx].userLink
Kontakte.KontaktArray[idx].userImage
Kontakte.KontaktArray[idx].description
Wo soll die datVar denn gespeichert werden?
Bei dem User in dessen Profil man ist oder im eigenen Profil.
{{userid}} ist dfas Profil vom User was man aufgerufen hat
{{user_id}} ist das eigen Profil
Ich würde sagen, im eigenen, also user_id.
www.friends-of-xobor.de (621181 - Template kann wechsel bei Pluin Tests)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)
Die Konsolen Meldung war "null"
Aber allein der Hint mit der user_id hat schon etwas geholfen. Nach dem ganzen Tag Coden hat man wohl den Wald vor lauter Bäume nicht mehr gesehen. Damit hat es zum Teil funktioniert, allerdings mit einem anderen Code.
Ich hab nun deinen Code eingebaut, wenn ich jedoch "Kontakte" statt "KontaktArray" nutze, kommt weiterhin "null" bei der Konsolenmeldung. Sobald es "KontaktArray" ist, ist es dann jedoch true. Woran kann dass denn liegen?
Aktuell ist alles in "Einstellungen - Profil editieren" also du liegst komplett richtig, dass es "user_id" ist. "userid" brauche ich dann später, sodass immer die Kontakte vom jeweiligen User abrufen kann.
Kleiner Fehler in Zeile 13
Kontakte.KontaktArray.push(combinedString);
www.friends-of-xobor.de (621181 - Template kann wechsel bei Pluin Tests)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)
#9 RE: Array speichern in dataVar ergibt Object
Zitat von Mike48 im Beitrag #6
// Kontakt speichern
KontaktArray.push(combinedString);
xobor.plugin('contactoverview').setDataVar('contacts_text_datavar', 3, '{{user_id}}', Kontakte, function(res) {
console.log("Plugin Variablentest - KontaktArray gespeichert: " + res);
});
Schon mal probiert, ein Array als String zu speichern?
2
3
4
5
6
7
8
9
10
11
xobor.plugin('contactoverview').setDataVar('contacts_text_datavar', 3, '{{user_id}}', JSON.stringify(KontaktArray). function(res) {
console.log("Plugin Variablentest - KontaktArray gespeichert: " + res);
});
xobor.plugin('contactoverview').getDataVar('contacts_text_datavar', 3, '{{user_id}}', function(res) {
console.log("Plugin Variablentest - type: " + typeof(res)
+"\n ist "+(Array.isArray(res) ? "array":"kein array"));
console.table(res);
});
Uhh nice, es funktioniert jetzt. Vielen lieben Dank @Mike48
@l2otbart_57 ein String wäre da wahrscheinlich nicht so gut. Ich habe ja einen String, der vier Daten abspeichert, welcher in den Array dann aufgenommen wird, sodass man per Array dann die verschiedensten Kontakte aufrufen kann. Aber trotzdem danke für deinen Tip p^^
- Informationen
- Aktuelle News
- Forum Tutorials - Tipps und Anleitungen
- SEO / Werbung fürs Forum
- Verwaltung
- Extras
- Design
- Plugin(system)
- Eure Fragen zu Tutorials
- Forum Support
- Fragen und Antworten
- Pluginsystem
- Plugins
- Templates & Sprachen
- Bugreport
- Verbesserungsvorschläge
- Sponsoren gesucht
- Das neue Xobor Business-Template
- News und Updates
- Bugreport
- Allgemeines Feedback
- Verbesserungsvorschläge
- Sonstiges
- Kaffeeklatsch
- Lob & Kritik
- Verbesserungsvorschläge
- Allgemeine Fragen
- Fehlermeldungen
- Verbesserungsvorschläge Responsive Design
- Bugreport Responsive Design
- Archiv - Alter Betatest
- Responsive Design - Verbesserungsvorschläge
- Responsive Design - Bugreport
- Fragen zum neuen Template
- Neue Administration Beta Test
- Bugreport Neue Administration
- Allgemeines Fragen & Feedback
- Verbesserungsvorschläge zur neuen Administration
- Shoutbox
Ähnliche Themen
Jetzt anmelden!
Jetzt registrieren!
© 2017 Xobor | Forum-Software