Eigene Seite in Plugins

11.05.2020 16:33 (zuletzt bearbeitet: 11.05.2020 16:34)
avatar  Mike48
#1 Eigene Seite in Plugins
avatar
Mitglied

Die obere Leiste wird bei Seiten die in einem Plugin erstellt wurden zwei mal ausgeführt.
Dadurch werden alle Elemente die in der oberen Leiste per Script eingefügt werde doppelt eingefügt.

Die Optionen beim erstellen


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

 Antworten

 Beitrag melden
12.05.2020 09:53
avatar  Mike48
#2 RE: Eigene Seite in Plugins
avatar
Mitglied

Das scheint doch nicht der Fall zu sein.
Ich habe noch eine weitere Testseite eingerichtet in der ein kleines Script ist um an der Konsole was auszugeben.

Die Obere Leiste wird da nur einmal verabeitet.

Wahrscheinlich ist habe ich einen Fehler in Kapselung bei mehreren Elementen die gleichzeitig auf einer Seite aufgerufen werden.
Zum Beispiel:
"Obere Leiste" mit "Untere Leiste"
"Obere Leiste" mit "Eigene Seite"
"Obere Leiste" mit "Profil"

Vielleicht kann man mal erklären wie man eine vernüftige Kapselung hin bekommt die über mehrer Plugin Elemente geht die gleichzeitig im Browser aktiv sind und Funktionen Elementübergreifend aufgerufen werden müssen um Funktionen nicht mehrfach zu laden . Also Funktionen die in der Oberen Leiste schon geladen wurden und auf allen Seiten zur Verfügung stehen von den anderen Elementen aufrufbar sind ohne sie auch noch in den anderen Elementen einzufügen.

In der Xobor Docu zur API ist nur ein Beispiel zur Kapselung die sich nur auf ein Element bezieht.
Nach dieser Docu müssten alle Funktionen die man in jedem Element braucht auch in jedem Element programmiert werden.


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

 Antworten

 Beitrag melden
12.05.2020 10:25
avatar  Mike48
#3 RE: Eigene Seite in Plugins
avatar
Mitglied

Ich glaube ich habe das Problem mit der doppelten Ausführung der Oberen Leiste gefunden.
Ich verwende das folgende Grundgerüst für meine Plugins

1
2
3
4
5
6
7
8
9
10
11
12
 
{{footerjs.start}}
{{footerjs}}
 
/*
* hier kommt der Code hin ohne die
* <script> . . </script>
* Tags. Die sind schon beim mobilen Template
* vorhanden und werden mit der letzten Zeile
* in den anderen Templates eingefügt
*/
{{footerjs.end}}
{{template!==177.start}}<script>{{footerjs}}</script>{{template!==177.end}}
 


Das Ploblem entsteht mit der der letzten Zeile

1
 
{{template!==177.start}}<script>{{footerjs}}</script>{{template!==177.end}}
 


Wenn die zum Beispiel in der Oberen Leiste und in anderen Elementen auf einer Seite vorhanden ist, wird die Obere Leiste nochmal ausgeführt.

Ich sehe da jetzt aber keine Lösung außer dass ich wieder zum alten System zurück gehe und den Code für Desktop und Mobil wieder getrennt programmiere.


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

 Antworten

 Beitrag melden
12.05.2020 11:49
avatar  Ingmar
#4 RE: Eigene Seite in Plugins
avatar
Technik

Zitat von Mike48 im Beitrag #3
Das Ploblem entsteht mit der der letzten Zeile


Nein, das Problem liegt darin, dass du in diesem Fall deinen Code doppelt in der Variable {{footerjs}} hinzufügst.

Mal als Beispiel:

1
2
 
//footerjs als leere Variable:
{{footerjs.start}}{{footerjs.end}}
 



1
2
3
4
5
6
 

//hier fürgen wir code hinzu, z.B. in der oberen Leiste:
{{footerjs.start}}
{{footerjs}}
var test = 1;
{{footerjs.end}}
 




Geben wir jetzt {{footerjs}} aus, erhalten wir als Ergebnis:

1
 
var test = 1;
 




Hast du jetzt in einem anderen Template nochmal den gleichen Code:

1
2
3
4
5
6
 

//hier fürgen wir code hinzu, z.B. in der unteren Leiste:
{{footerjs.start}}
{{footerjs}}
var test = 1;
{{footerjs.end}}
 




Jetzt ist deine Ausgabe

1
2
3
 
var test = 1;
var test = 1;
 
 




Du musst das also so aufbauen, dass nur der Code den du brauchst auch zu Footerjs hinzugefügt wird.

So kannst du das z.B. auch hundertmal hintereinander ausführen und hast den Code trotzdem nur einmal in der {{footerjs}}:

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

{{codeschongeladen==false.start}}
{{footerjs.start}}
{{footerjs}}

/*
* hier kommt der Code hin ohne die
* <script> . . </script>
* Tags. Die sind schon beim mobilen Template
* vorhanden und werden mit der letzten Zeile
* in den anderen Templates eingefügt
*/
{{footerjs.end}}
{{codeschongeladen.start}}1{{codeschongeladen.end}}
{{codeschongeladen==false.end}}
 

 

Viele Grüße,
Ingmar


 Technik · Homepagemodules.de · Miranus GmbH

 Antworten

 Beitrag melden
12.05.2020 13:08 (zuletzt bearbeitet: 12.05.2020 13:09)
avatar  Mike48
#5 RE: Eigene Seite in Plugins
avatar
Mitglied

Das Thema könnt ihr bitte in die Rubrik Plugins verschieben, ist ja kein Bug.

Dann habe ich dieses Konstrukt scheinbar nicht richtig verstanden. Ich ging davon aus, dass die Variable {{footerjs}} im mobilen Template den JS und JQuery Code enthält und ich dann meinen Code da hinzufüge.

Du hast es mir mal gegeben weil ich im Template 77 (jetzt 177) JQuery-Code ausgeführen wollte obwohl noch kein JQuery geladen war.
Um das zu verhindern hast du mir den Schnipsel mal gegeben. Und er in allen Templates funktionieren soll kam noch diese unter Zeile hinzu mit der in den Desktop-Templates noch die script Tags eingefügt werden.

Funktioniert ja auch wenn es nur in einem Element je Seite ist.

Jetzt weiß ich aber immer noch nicht wie ich bei allen Elementen einer Seite es hinbekomme dass JQuery erst ausgeführt wird wenn JQuery auch erst geladen laden ist.


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

 Antworten

 Beitrag melden
12.05.2020 13:17
avatar  Ingmar
#6 RE: Eigene Seite in Plugins
avatar
Technik

Zitat von Mike48 im Beitrag #5
Dann habe ich dieses Konstrukt scheinbar nicht richtig verstanden. Ich ging davon aus, dass die Variable {{footerjs}} im mobilen Template den JS und JQuery Code enthält und ich dann meinen Code da hinzufüge.


Das ist völlig korrekt.
{{footerjs}} ist eine ganz normale Forenvariable wie jede andere auch. In der Unteren Leiste des mobilen Template gibt es dann (nachdem Jquery geladen ist) die Zeile

1
 
<script>{{footerjs}}</script>
 


in der das Ganze ausgegeben wird.

Wenn du deinen Code da aber 2 mal hinzufügst wird der eben am Ende auch 2 mal ausgeführt.


Daher mein Lösungsvorschlag über eine andere Variable zu testen, ob der Code bereits hinzugefügt wurde.

Sonst poste mir mal dein konkretes Beispiel, dann suchen wir dafür eine Lösung.

Viele Grüße,
Ingmar


 Technik · Homepagemodules.de · Miranus GmbH

 Antworten

 Beitrag melden
13.05.2020 11:58 (zuletzt bearbeitet: 13.05.2020 12:09)
avatar  Mike48
#7 RE: Eigene Seite in Plugins
avatar
Mitglied

Da JQuery im mobilen Template Fehler wirft wenn es nicht in der unteren Zeile ganz unten steht habe ich mein Grundgerüst für Plugin-Elemente jetzt umgestellt. Statt mit JQuery rufe ich die run Function in der Kapselung mit JavaScript mit dem load Event auf.

1
2
3
4
5
6
7
8
9
10
11
 
/* error bei template 77/177 wenn nicht in untere leiste footer */
$(document).ready(function() {
// die run Funktion in der Kapselung aufrufen
{{plugin_accountswitcher1_kapsel_id_ES}}.run();
});
 
/* kann ueberall verwendet werden */
window.addEventListener('load', function ( ) {
// die run Funktion in der Kapselung aufrufen
{{plugin_accountswitcher1_kapsel_id_test.run}};
});
 



Mein Grundgerüst für Plugin Elemente sieht jetzt so aus

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
 
<!--
Code fuer die Obere Leiste
Entweder footer
Oder foben_inline - html_body_open
 
Bezeichner fuer die Kapselungen erstellen in je einer Variablen fuer jedes Element im Plugin
-->
{{plugin_id.start}}accountswitcher{{plugin_id.end}}
{{plugin_prefix.start}}plugin_{{plugin_id}}{{plugin_prefix.end}}
 
{{kapsel_id.start}}{{plugin_prefix}}{{plugin_sufix}}{{kapsel_id.end}}
 
<!-- element userprofil -->
{{kapsel_id_userprofil.start}}{{plugin_prefix}}_userprofil{{kapsel_id_userprofil.end}}
 
<!-- element untereleiste -->
{{kapsel_id_untereleiste.start}}{{plugin_prefix}}_untereleiste{{kapsel_id_untereleiste.end}}
 

{{template==299.start}}
<!--
Hier kommen Infos zum Plugin hin die nicht in den Foren erscheinen sollen
Template 299 gibt es hoffentlich nicht
Dadurch wird dieser Block nicht in den Browser des Users geladen
-->
{{template==299.end}}
<script>
 
var {{kapsel_id}} = new function() {
// begin der Kapselung mit dem Namen aus der Variablen plugin_accountswitcher1_kapsel_id_test
var self = this;
// begin der Variablen
self.array_1 = [];
self.idx = 0;
 
// begin der Funktionen
self.test_1 = function(info) {
alert("Text ausgeben: " + info);
};
 
self.run = function() {
console.log("kapsel_id ist ein Grundgeruest fuer Kapselung");
};
 

}; // ende kapseleung
 
window.addEventListener('load', function ( ) {
// die run Funktion in der Kapselung aufrufen
{{kapsel_id.run}};
});
 
</script>
 



Da es keinen Zugriff auf auf die Plugin_id gibt habe ich es mit Variablen gelöst damit ich beim Kopieanlegen nicht den ganzen Code durchsuchen muss um den Namen für die Kapselung auf auf die neue Plugin_id zu ändern. Ich muss den namen oft ändern wenn ich Plugins zum testen in andere Foren mit anderem Template schicke und dort eine Kopie anlege.

Ich erstelle für jedes Element einen egenen Namen für die Funktions-Variable zum Kapseln.

Gibt es eine andere Lösung dass man in allen Elementen den gleichen Namen für die Funktions-Variable zum Kapseln verwenden kann wenn mehrere Elemente auf einer Seite verwendet werden, zB. Obere Leiste, Untere Leiste, Forenübersicht.

Edit:
Kann man dieses Thema hier in die Rubrik Plugins verschieben.
Es ist ja kein Bug.


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

 Antworten

 Beitrag melden
13.05.2020 12:22
avatar  Ingmar
#8 RE: Eigene Seite in Plugins
avatar
Technik

Um ehrlich zu sein steige ich da grade nicht durch.
Was genau bewirkst du denn mit deiner Kapselung? Ich glaube du machst es dir komplizierter als du müsstest.
Was machen {{kapsel_id_untereleiste}} und {{kapsel_id_userprofil}} - die werden doch nie wieder verwendet im Code?
Woher kommt {{plugin_sufix}}?

Zitat von Mike48 im Beitrag #7
Gibt es eine andere Lösung dass man in allen Elementen den gleichen Namen für die Funktions-Variable zum Kapseln verwenden kann wenn mehrere Elemente auf einer Seite verwendet werden, zB. Obere Leiste, Untere Leiste, Forenübersicht.


Verstehe ich das richtig, dass du das selbe Plugin-Template-Element auf einer Seite mehrfach laden möchtest (also einmal in der oberen Leiste, in der Foren-Übersicht und dann nochmal im Footer)?

Kannst du das an einem konkreten Beispiel zeigen was du dann in diesen 3 Elementen machen möchtest?
Wenn es das leichter macht kannst du mir auch eine private Freigabe für dein Testplugin an das Forum 519098 schicken.

Viele Grüße,
Ingmar


 Technik · Homepagemodules.de · Miranus GmbH

 Antworten

 Beitrag melden
13.05.2020 13:33
avatar  Mike48
#9 RE: Eigene Seite in Plugins
avatar
Mitglied

Ich verwende in Plugins mehrere Elemente.
Code der überall angewendet wird setze ich entweder in die Obere oder Untere Leiste.
Code der nur im Profil gebraucht wird kommt in das Element Mitglieder Profil.
Code für den Kalender im Element Kalender.

Ist der Kalender auf, sind die Elemente Obere Leiste, Untere Leiste und Kalender aktiv.
Will ich vom Element Kalender auf Funktionen in der Oberen Leiste zugreifen geht es nicht, wenn in der Oberen Leiste eine einfache Kapselung mit einer anonymen Funktion ist. Entweder muss ich die Kapselung weglassen oder ihr einen Namen geben. Die Namen müssen aber eindeutig sein um nicht mit anderen Plugins zu kollidieren.

Zitat von Ingmar im Beitrag #8
Was machen {{kapsel_id_untereleiste}} und {{kapsel_id_userprofil}} - die werden doch nie wieder verwendet im Code?

Die verwende ich in den Elementen Userprofil und untere Leiste.
Ich habe sie in die Obere leiste gesetzt damit ich sie zentral habe.


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

 Antworten

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