Grundkurs Plugins schreiben

  • Seite 6 von 11
13.03.2014 18:52
avatar  Olaf
#76 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Zitat von Christian im Beitrag #75
ändere mal die Reihenfolge


Das war die Lösung der Fehleranzeige in der Konsole.

Danke.

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
15.03.2014 00:29 (zuletzt bearbeitet: 15.03.2014 00:57)
avatar  Olaf
#77 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Ich habe Deine Funktion "getUserinformation" mal erweitert,um einzelne Daten (hier der Username) aus den Object "result" anzeigen zu lassen.Mit der "for" Schleife kann man dann alle Usernamen ermitteln.Ist dann aber,wenn man z.B. 1000 Mitglieder hat,eine recht zeitintensive Aktion.

1
2
3
4
5
6
7
8
9
10
11
 
function getUserinformation(result) {
var ausgabe ="";
for (var zaehler in result) {
var start = result[zaehler].toSource().indexOf("uname")+7;
var ende = result[zaehler].toSource().indexOf ('"', start)
var username = result[zaehler].toSource().substring(start, ende);
ausgabe = ausgabe + " ," +username;
}
alert(ausgabe);
}
 
 



Deshalb meine Frage,ob man der "getDeep()" oder der "getDeepList()" Funktion noch einen Parameter mit angeben kann,das z.B. nur die Usernamen von der Datenbank ausgelesen werden?

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
16.03.2014 14:52
#78 RE: Grundkurs Plugins schreiben - Grundlagen
avatar
Techniker

Nein die Felder kann man nicht bestimmen allerdings kann man das auch gut verarbeiten. Ich muss dir allerdings sagen, dass man so nicht mit einem js-object arbeitet.

Das macht man so.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 

var obj = {max:{userid:1,titel:'blubb'}, moriz:{userid:2,titel:'bli'}};
 
// am besten immer mit each!
var alertVar = '';
$.each(obj, function(key, value) {
console.log('key: ', key, 'value: ', value);
alertVar += key + ', ';
});
alert(alertVar);
 
// man kann auf ein Object wie auf ein Assoziatives Array zugreifen
console.log(obj['max']);
// oder
console.log(obj.max);
 
// usw.
console.log(obj['max']['userid']);
console.log(obj.max.userid);
 
 


 Antworten

 Beitrag melden
16.03.2014 18:06
avatar  Olaf
#79 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Ich möchte die Objecte ja nicht in der Konsole ausgeben lassen,das funktioniert ja einwandfrei,sondern mit dem Inhalt "result" arbeiten.
Die Funktion "indexOf()" holt mir ohne viel Umwege die Objecte aus den Container "result" heraus und ich kann sie weiterverarbeiten.
Testweise habe ich in meinem Forum damit ein Plugin geschrieben,das mir eine Topposter-Liste in der Statistikbox im Footer vom Forum ausgibt.
Nachteil ist,das es nur im FF funktioniert.Ich habe es auch mit einer "for in" Schleife probiert,um die Objecte in einen Array zu schieben,aber auch diese Variante funktioniert nur einwandfrei im FF.

Wie bekomme ich die Objecte aus "result" in einen Array,der in jeden Browser funktioniert?

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
16.03.2014 21:55 (zuletzt bearbeitet: 16.03.2014 21:56)
#80 RE: Grundkurs Plugins schreiben - Grundlagen
avatar
Techniker

1
2
3
4
5
6
7
8
9
10
11
 

// ein verschachteltes js-object
var obj = {max:{userid:1,titel:'blubb'}, moriz:{userid:2,titel:'bli'}};
 
// greift auf den Key "max" zu und liefert dessen value zurück, was ebenfalls ein Object ist
obj.max // = Object {userid:1, titel:'blubb'}
 
// greift auf den Key "max" zu ... weiter greifen wir von Max auf den key vom value-object von max zu ... also den titel
// jetzt ist die Ausgabe nichts weiter als ein String
obj.max.titel // = String 'blubb'
 
 



wie gesagt ... das was du da versuchst ist ein komplett falscher Ansatz


 Antworten

 Beitrag melden
17.03.2014 20:01 (zuletzt bearbeitet: 17.03.2014 20:04)
avatar  Olaf
#81 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Das habe ich begriffen.So kann man gezielt auf Daten im Object zugreifen ohne z.B. mit meiner "Suchfunktion" in den Objecten.

Nun möchte ich ja die Mitgliederdaten bearbeiten und mir keine Daten in der Console anschauen.
Ich habe mit Deinem Beispielscript von der Vorseite mit den Object-Container "result" mal versucht,die value Daten auszulesen.

1
2
3
4
5
6
7
8
 
function getUserinformation(result) { 
var alertVar = '';
$.each(result, function(key, value) {
console.log('key: ', key, 'value: ', value);
alertVar += key + ',' + value;
});
}
 
 


In der Console werden mir die Objecte (value) richtig angezeigt.
Gebe ich zum Beispiel "alert(alertVar)" noch zu den Code,dann werden mir die Key's richtig angezeigt,aber der Inhalt mit "[object Object]" ausgegeben.
Gebe ich nach Deinen Prinzip "console.log(result.1.name)" (result=Objecte,1= Key,name=name aus den Object 1 mit Wert Username) meckert die Konsole "SyntaxError: missing ) after argument list".
Irgendwie lassen sich die Inhalte der Objecte nicht auslesen.

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
18.03.2014 20:19 (zuletzt bearbeitet: 18.03.2014 20:19)
avatar  Olaf
#82 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Ich habe es hinbekommen:

1
2
3
4
5
6
7
8
9
10
 
function getUserinformation(result) {
var userids = [];
var user = [];
var posts =[];
$.each(result, function(key,value) {
user.push(value["uname"]);
posts.push(value["user_posts"]);
userids.push(key);
});
 
 



Ich danke Dir für Deine wirklich guten Beispiele!

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
18.03.2014 22:04
avatar  Olaf
#83 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Meine Tests habe ich alle im Plugin System im FF gemacht und dort läuft alles einwandfrei.Deshalb auch meine Euphorie,die aber schlagartig zu Ende war,als ich mir das Ergebniss in allen anderen Browsern angesehen habe.
Wieso ist "value" für alle Browser leer und der FF liest aber den Inhalt einwandfrei aus den Objecten?
Dagegen wird die Ausgabe der Key's in allen Browsern wiederum vollständig angezeigt.

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
19.03.2014 17:04
avatar  Olaf
#84 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Ich habe hier mal zwei Screenshots gemacht.Einmal vom FF wo alles so läuft wie es sein soll und einmal von Opera,wo alle Objecte leer sind.
Ich habe die Abfrage so eingesetzt,wie ich sie in meinem letzten Posting gezeigt habe.
Kannst Du mir eventuell sagen,wieso das so ist?

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/
Bildanhänge
imagepreview

Topposter FF.jpg

download

imagepreview

Topposter Opera.jpg

download


Aufgrund eingeschränkter Benutzerrechte werden nur die Namen und (falls vorhanden) Vorschau-Grafiken der Dateianhänge angezeigt Jetzt anmelden!

 Antworten

 Beitrag melden
20.03.2014 06:07
avatar  Olaf
#85 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Ich habe das Problem gelöst!
Da die Objecte mit den Mitgliederlistenrechten im Adminmenü belegt sind und ich sie für Gäste nicht freigegeben hatte,wurden mir natürlich die Objecte nicht angezeigt.
Es hat mir vor kurzen ein netter Techniker einen treffenden Satz geschrieben:
"Manchmal ist die Lösung einfacher als man denkt..."

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
20.03.2014 11:48
#86 RE: Grundkurs Plugins schreiben - Grundlagen
avatar
Techniker

Für alles was du über die API abfragen möchtest, benötigst bzw. der User natürlich auch die entsprechenden Rechte. Das wird vorher immer geprüft, bevor der Server eine Antwort gibt.


 Antworten

 Beitrag melden
22.03.2014 11:12
avatar  Olaf
#87 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Ich habe das Plugin "Topposter" fertig und habe dazu noch ein paar Fragen.

Zitat von Christian im Beitrag #86
Für alles was du über die API abfragen möchtest, benötigst bzw. der User natürlich auch die entsprechenden Rechte. Das wird vorher immer geprüft, bevor der Server eine Antwort gibt.

1.Gibt es vielleicht eine andere Möglichkeit,die Userliste im Plugin per "getDeep()/getDeepList()" auch ohne Gruppenrechte (Adminmenü) auszulesen?
2.Ich habe das Script so geschrieben,das die gesamte Userliste ausgelesen wird und dann per Logik die 10 Besten User herausgeholt werden und in ein Sitzungscookie abgespeichert und so dann nach jeden weiteren Aufruf die Topposter nur noch aus den Cookie geladen werden.
Würde sich die Last der Server oder sich die Ladezeit der Foren sehr ungünstig auswirken,wenn ich die Userliste bei jeden Aufruf komplett neu lade?

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
24.03.2014 14:13
#88 RE: Grundkurs Plugins schreiben - Grundlagen
avatar
Techniker

Zu 1 nein
Zu 2. .... sowas kann im Store zu einer Ablehnung führen!
Bedenke wenn ein Forum das Plugin nutzen würde, dass z.B. 50.000 User hat, dann werden jedesmal 50.000 Einträge mit jedem Seitenaufruf geladen werden.


 Antworten

 Beitrag melden
24.03.2014 17:23
avatar  Olaf
#89 RE: Grundkurs Plugins schreiben - Grundlagen
Ol
Mitglied

Zitat von Christian im Beitrag #88

Zu 2. .... sowas kann im Store zu einer Ablehnung führen!
Bedenke wenn ein Forum das Plugin nutzen würde, dass z.B. 50.000 User hat, dann werden jedesmal 50.000 Einträge mit jedem Seitenaufruf geladen werden.


Deshalb habe ich es über einen Zwischenspeicher (Cookie) gelöst.
Ich weiß sowieso noch nicht,ob ich das Plugin frei gebe,weil es mir nicht gefällt,das man die Userliste für Gäste freigeben müsste ,wenn man die Anzeige für Gäste haben will.
Aber eine Frage habe ich noch,wie man per Javascript abfragen kann,welche Template geladen ist "{{template==144.start}}...{{template==144.end}}?

Gruß
Olaf

__________________________

http://138600.homepagemodules.de/

 Antworten

 Beitrag melden
24.03.2014 17:32
#90 RE: Grundkurs Plugins schreiben - Grundlagen
avatar
Techniker

aktuell noch nicht aber ist notiert ... Vorschlag gefällt mir.


 Antworten

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