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.
Entwickler-Talk
Hier können sich Entwickler von Plugins untereinander austauschen, um Rat fragen wenn sie an einer Stelle nicht weiter kommen oder einfach nur ein paar Ideen durchsezieren.
Achtung: Dieser Thread dient dem Austausch der Bastler - für allgemeine Verbesserungsvorschläge oder Anmerkungen zu den Plugins nutzt bitte wie gehabt die anderen Themen hier im Forum oder - wenn vorhanden - direkt das Thema zum Plugin.
Lets talk.
Ich habe mit mir gerungen ob ich hier schreibe oder nicht.
Mein Problem hat weniger etwas mit Plugins zu tun sondern eher mit den Sprachen die ich nicht gelernt habe.
Da ich aber einen Teilerfolg erzielen konnte,
verwende ich das Beispiel um zu zeigen was klappt und worin meine weiteren Probleme bestehen.
Es geht um das Thema "mobile Geräte".
Manche Plugins machen Probleme auf solchen Geräten.
Also habe ich das Netz nach einer Lösung abgeklappert um einigermaßen zuverlässig solche Geräte erkennen zu können.
Meine Ausgangsbasis ist folgende:
2
3
4
5
6
7
8
9
10
<script>
function isMobile(){
return navigator.userAgent.match(/(iPhone|iPod|iPad|blackberry|android|Kindle|htc|lg|midp|mmp|mobile|nokia|opera mini|palm|pocket|psp|sgh|smartphone|symbian|treo mini|Playstation Portable|SonyEricsson|Samsung|MobileExplorer|PalmSource|Benq|Windows Phone|Windows Mobile|IEMobile|Windows CE|Nintendo Wii)/i);
}
if(isMobile()){
alert("Es handelt sich um ein mobiles Gerät");
}else {
alert("Es handelt sich um kein mobiles Gerät");
}
</script>
Das habe ich in ein Plugin gepackt und getestet.
Da ich kein Smartphone etc. habe,
habe ich ein Addon für den FF installiert im ein iPhone zu simulieren (den userAgent).
Somit konnte ich im FF hin- und herschalten und das Ergebnis testen.
Es klappte soweit gut.
Nun wollte ich diesen Test auf einen Code anwenden der auf mobilen Geräten nicht ausgeführt werden soll.
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
{{plugin_clown_config_visiblegroup_boolean==true.start}}
<SCRIPT language="JavaScript">
document.writeln('');
var fishRurl='https://files.homepagemodules.de/b572886/a_698_23bb7855.gif'; //* Hier die Adressen der Fische rein !!!!!!! *//
var fishLurl='https://files.homepagemodules.de/b572886/a_697_08e943ab.gif';
document.write('');
var speed=1;
var change=5000;
var xmax=2; //* Hier kann man die horizontale Geschwindigkeit veraendern *//
var ymax=2; //* Hier kann man die vertikale Geschwindigkeit veraendern *//
var w3c=(document.getElementById)?true:false;
var ns4=(document.layers)?true:false;
var ie4=(document.all && !w3c)?true:false;
var ie5=(document.all && w3c)?true:false;
var ns6=(w3c && navigator.appName.indexOf("Netscape")>=0)?true:false;
var px = (window.opera)?'':'px';
var w_x, w_y, bothfish,pich,picw;
var incrx=Math.floor(Math.random()*xmax);
var incry=Math.floor(Math.random()*ymax);
var xdir=true;
var ydir=true;
var imagex=new Image(); imagex.src=fishLurl;
var t=(ns4)? '<layer name="bothfish" top="-100" left="0">' : '<div id="bothfish" style="position:absolute; top:0px; left;0px; width:1px; height:1px; z-index: 99999;">';
t+='<img src="'+fishRurl+'" border="0" name="fishpic">';
t+=(ns4)?'</layer>':'</div>';
document.write(t);
function getid(id){
if(ns4) return document.layers[id];
else if(ie4)return document.all[id];
else return document.getElementById(id);
}
function moveidto(id,x,y){
if(ns4)id.moveTo(x,y);
else{
id.style.left=x+px;
id.style.top=y+px;
}}
function moveidby(id,x,y){
if(ns4)id.moveBy(x,y);
else{
id.style.left=parseInt(id.style.left)+x+px;
id.style.top=parseInt(id.style.top)+y+px;
}}
function getwindowsize(){
if((ie4||ie5)&&!window.opera){
w_x=document.body.clientWidth;
w_y=document.body.clientHeight;
}else{
w_x=window.innerWidth-15;
w_y=window.innerHeight-15;
}}
function changedirs(){
if(Math.floor(Math.random()*5)>2)xdir=(Math.floor(Math.random()*2)==0);
if(Math.floor(Math.random()*5)>2)ydir=(Math.floor(Math.random()*2)==0);
if(Math.floor(Math.random()*5)>2)incrx=Math.floor(Math.random()*xmax);
if(Math.floor(Math.random()*5)>2)incry=Math.floor(Math.random()*ymax);
checkdirs();
setTimeout('changedirs()',Math.ceil(Math.random()*change));
}
function checkdirs(){
if(xdir) (ns4)? bothfish.document.images["fishpic"].src=fishRurl:document.images["fishpic"].src=fishRurl;
else (ns4)? bothfish.document.images["fishpic"].src=fishLurl:document.images["fishpic"].src=fishLurl;
}
function animate(){
tx=(ns4)?bothfish.left:parseInt(bothfish.style.left);
ty=(ns4)?bothfish.top:parseInt(bothfish.style.top);
if((ie4||ie5)&&!window.opera){
xo=document.body.scrollLeft;
yo=document.body.scrollTop;
}else{
xo=window.pageXOffset;
yo=window.pageYOffset;
}
if(ydir) if((ty+incry+pich)>(w_y+yo)){ydir=false; checkdirs(); moveidby(bothfish,0,-incry);}else{ moveidby(bothfish,0,incry); }
else if((ty-incry)<yo){ ydir=true; checkdirs(); moveidby(bothfish,0,incry); }else{ moveidby(bothfish,0,-incry); }
if(xdir) if((tx+incrx+picw)>(w_x+xo)){ xdir=false; checkdirs(); moveidby(bothfish,-incrx,0); }else{ moveidby(bothfish,incrx,0); }
else if((tx-incrx)<xo){ xdir=true; checkdirs(); moveidby(bothfish,incrx,0); }else{ moveidby(bothfish,-incrx,0); }
}
window.onresize=function(){
if(ns4)setTimeout('history.go(0)',400);
else getwindowsize();
}
window.onload=function(){
bothfish=getid('bothfish');
if(ns4){
picw=bothfish.document.images['fishpic'].width;
pich=bothfish.document.images['fishpic'].height;
}else{
picw=document.images['fishpic'].width;
pich=document.images['fishpic'].height;
}
getwindowsize();
moveidto(bothfish,(w_x-picw)/2,(w_y-pich)/2);
setInterval('animate()',speed);
changedirs();
}
</SCRIPT>
{{plugin_clown_config_visiblegroup_boolean==true.end}}
Um den Code selbst geht es mir nicht.
Sondern um das Prinzip.
Im Prüfteil habe ich den Else-Teil weggelassen.
Nun sind beide Teile in <script> ... </script> eingebunden.
Den Hauptcode einfach komplett in die If-Anweisung zu schieben, klappt nicht.
Man kann wohl <script> nicht ineinander verschachteln. ???
Also habe ich im Prüfteil eine Variable erstell, die ich im zweiten Teil wieder abfragen kann.
Lange Rede, kurzer Sinn - hier ist der komplette Code:
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
<script>
var m=0
function isMobile(){
return navigator.userAgent.match(/(iPhone|iPod|iPad|blackberry|android|Kindle|htc|lg|midp|mmp|mobile|nokia|opera mini|fennec|palm|series60|pocket|psp|sgh|smartphone|symbian|treo mini|Playstation Portable|SonyEricsson|Samsung|MobileExplorer|PalmSource|Benq|Windows Phone|Windows Mobile|IEMobile|Windows CE|Nintendo Wii)/i);
}
if(isMobile()){
var m=1;
}
</script>
{{plugin_clown_config_visiblegroup_boolean==true.start}}
<SCRIPT language="JavaScript">
if (m==0) {
document.writeln('');
var fishRurl='https://files.homepagemodules.de/b572886/a_698_23bb7855.gif'; //* Hier die Adressen der Fische rein !!!!!!! *//
var fishLurl='https://files.homepagemodules.de/b572886/a_697_08e943ab.gif';
document.write('');
var speed=1;
var change=5000;
var xmax=2; //* Hier kann man die horizontale Geschwindigkeit veraendern *//
var ymax=2; //* Hier kann man die vertikale Geschwindigkeit veraendern *//
var w3c=(document.getElementById)?true:false;
var ns4=(document.layers)?true:false;
var ie4=(document.all && !w3c)?true:false;
var ie5=(document.all && w3c)?true:false;
var ns6=(w3c && navigator.appName.indexOf("Netscape")>=0)?true:false;
var px = (window.opera)?'':'px';
var w_x, w_y, bothfish,pich,picw;
var incrx=Math.floor(Math.random()*xmax);
var incry=Math.floor(Math.random()*ymax);
var xdir=true;
var ydir=true;
var imagex=new Image(); imagex.src=fishLurl;
var t=(ns4)? '<layer name="bothfish" top="-100" left="0">' : '<div id="bothfish" style="position:absolute; top:0px; left;0px; width:1px; height:1px; z-index: 99999;">';
t+='<img src="'+fishRurl+'" border="0" name="fishpic">';
t+=(ns4)?'</layer>':'</div>';
document.write(t);
function getid(id){
if(ns4) return document.layers[id];
else if(ie4)return document.all[id];
else return document.getElementById(id);
}
function moveidto(id,x,y){
if(ns4)id.moveTo(x,y);
else{
id.style.left=x+px;
id.style.top=y+px;
}}
function moveidby(id,x,y){
if(ns4)id.moveBy(x,y);
else{
id.style.left=parseInt(id.style.left)+x+px;
id.style.top=parseInt(id.style.top)+y+px;
}}
function getwindowsize(){
if((ie4||ie5)&&!window.opera){
w_x=document.body.clientWidth;
w_y=document.body.clientHeight;
}else{
w_x=window.innerWidth-15;
w_y=window.innerHeight-15;
}}
function changedirs(){
if(Math.floor(Math.random()*5)>2)xdir=(Math.floor(Math.random()*2)==0);
if(Math.floor(Math.random()*5)>2)ydir=(Math.floor(Math.random()*2)==0);
if(Math.floor(Math.random()*5)>2)incrx=Math.floor(Math.random()*xmax);
if(Math.floor(Math.random()*5)>2)incry=Math.floor(Math.random()*ymax);
checkdirs();
setTimeout('changedirs()',Math.ceil(Math.random()*change));
}
function checkdirs(){
if(xdir) (ns4)? bothfish.document.images["fishpic"].src=fishRurl:document.images["fishpic"].src=fishRurl;
else (ns4)? bothfish.document.images["fishpic"].src=fishLurl:document.images["fishpic"].src=fishLurl;
}
function animate(){
tx=(ns4)?bothfish.left:parseInt(bothfish.style.left);
ty=(ns4)?bothfish.top:parseInt(bothfish.style.top);
if((ie4||ie5)&&!window.opera){
xo=document.body.scrollLeft;
yo=document.body.scrollTop;
}else{
xo=window.pageXOffset;
yo=window.pageYOffset;
}
if(ydir) if((ty+incry+pich)>(w_y+yo)){ydir=false; checkdirs(); moveidby(bothfish,0,-incry);}else{ moveidby(bothfish,0,incry); }
else if((ty-incry)<yo){ ydir=true; checkdirs(); moveidby(bothfish,0,incry); }else{ moveidby(bothfish,0,-incry); }
if(xdir) if((tx+incrx+picw)>(w_x+xo)){ xdir=false; checkdirs(); moveidby(bothfish,-incrx,0); }else{ moveidby(bothfish,incrx,0); }
else if((tx-incrx)<xo){ xdir=true; checkdirs(); moveidby(bothfish,incrx,0); }else{ moveidby(bothfish,-incrx,0); }
}
window.onresize=function(){
if(ns4)setTimeout('history.go(0)',400);
else getwindowsize();
}
window.onload=function(){
bothfish=getid('bothfish');
if(ns4){
picw=bothfish.document.images['fishpic'].width;
pich=bothfish.document.images['fishpic'].height;
}else{
picw=document.images['fishpic'].width;
pich=document.images['fishpic'].height;
}
getwindowsize();
moveidto(bothfish,(w_x-picw)/2,(w_y-pich)/2);
setInterval('animate()',speed);
changedirs();
}
}
</SCRIPT>
{{plugin_clown_config_visiblegroup_boolean==true.end}}
Zeile 13 und 119 sind nun meine Erweiterungen im unteren Code.
Mario hat das Ergebnis mit unterschiedlichen Geräten und Browsern getestet.
Der Code wird nun nicht mehr auf mobilen Geräten ausgeführt.
Juhuu
Diese Lösung klappt aber nur wenn der eigentliche Code komplett von <script> ... </script> umschlossen ist.
Reine HTML-Teile kann ich damit nicht abfangen.
Es gibt im HTML keine IF-Anweisungen.
Im Grunde lassen sich HTML-Teile auch nicht einfach abbrechen.
Variablen in HTML und JS sind auch nicht einfach übertragbar.
HTML-Teile kann ich auch nicht einfach in JS einfügen.
usw.
Marios Pfeile bestehen z.B. aus JS-, HTML- und CSS-Anweisungen.
Mit der jetzigen Lösung kann ich aber nur JS abfangen.
Also wird ein solches Plugin entweder fehlerhaft oder überhaupt nicht mehr ausgeführt.
Die Abfrage nach mobilen Geräten funktioniert also nur in Sonderfällen.
Ich sagte ja, daß das ein weites Feld ist,
welches meine Kenntnisse bei weitem überschreitet.
Eine allgemein gültige Lösung wird es wohl nicht geben.
Falls mir dennoch jemand Tips geben kann, wäre das klasse.
Im Netz finde ich immer nur Spezialfälle oder Antworten wie:"Mach es doch anders. So un so. Das klappt besser. Oder PHP..."
Das löst zwar das spezielle Problem des Fragestellers aber nicht ob etwas grundsätzlich geht oder nicht.
Falls ich mich hier hoffnungslos festgefahren habe, lasse ich es erstmal.
Und sorry für den langen Text ;-)
Mit Jquery geht das ganz einfach (jquery steht in allen Plugins zur Verfügung):
Im Plugin schreibst du so was:
2
3
4
5
6
7
<style>.nomobile{display:none}</style>
<div class="nomobile">
hier der Plugincode..
</div>
Dann kannst du später einfach die Div per Javascript anzeigen, wenn das Gerät dafür geeignet ist:
2
3
4
5
6
<script>
if(!isMobile()){
$('.nomobile').show();
}
</script>
Noch schöner ist natürlich die reine CSS3-Lösung - das klappt unter Umständen zwar in ein paar alten Browser nicht, in aktuellen sollte das aber genauso klappen:
z.B
2
3
4
5
6
7
8
9
10
11
12
<style>
.nomobile{display:none}
@media all and (min-width: 400px){
.nomobile{display:block;}
}
</style>
<div class="nomobile">
hier der Plugincode..
</div>
siehe z.B: http://www.heise.de/ix/artikel/Allen-recht-1058764.html
Zitat von Ingmar im Beitrag #3
Noch schöner ist natürlich die reine CSS3-Lösung - das klappt unter Umständen zwar in ein paar alten Browser nicht, in aktuellen sollte das aber genauso klappen:
z.B1
2
3
4
5
6
7
8
9
10
11
12
<style>
.nomobile{display:none}
@media all and (min-width: 400px){
.nomobile{display:block;}
}
</style>
<div class="nomobile">
hier der Plugincode..
</div>
siehe z.B: http://www.heise.de/ix/artikel/Allen-recht-1058764.html
Stimmt damit geht es aber die Pixel müssen höher damit es auf dem Taplet nicht angezeigt wird denn auch da gehen die Up/down Pfeile in die Mitte zusammen.
Erhöhe ich den Wert 400px dann wird es wie es soll auch auf dem Taplet ausgeblendet.
Somit Klappt das im Business getestet hervoragend.
Danke Ingmar für die Erklärung. Soviel gesucht und gelesen wie bisher habe ich noch nie um ein Problem in den Griff zu bekommen. Alles leider ohne den Gewünschten erfolg.
Vielen Dank Ingmar,
jetzt habe ich genug um zu testen und zu recherchieren.
Ich will die Codes nämlich nicht nur einfach übernehmen und anpassen.
Ich schaue mir alle 3 Wege genau an und versuche die Unterschiede und Möglichkeiten zu verstehen.
Zumindest bin ich jetzt voller Hoffnung etwas neues verstehen und umsetzen zu können.
Dann habe ich gleich noch eine Frage und Hoffe das es einen User/Techniker gibt der sie beantworten kann.
Welchen weg kann man gehen um Selbst erstellte Plugins von Usern ein- und ausschaltbar zu machen? Ist das Über eine Abfrage möglich und wenn ja wie wird das dann Via Cookie gespeichert? dafür gibt es doch sicher einen Weg?
Es ist ja so das einige User ein Plugin nicht haben wollen und dann wieder den Admin wie so oft dafür verantwortlich machen das es nun da an der Stelle ist wo es ist. Daher ist die Frage aufgekommen kann man das Einstellbar machen für Nutzer so ein Plugin?
2 Möglichkeiten:
Einmal über Cookies:
Du musst per Cookie speichern, ob der Besucher das Plugin sehen will oder nicht.
Im optimalfall baust du das dann so, dass das Plugin nicht sichtbar ist, dann ließt du den Cookie aus und zeigst den Code des Plugins enstprechend der Einstellung.
Um Cookies zu speichern und zu lesen kannst du die hauseigenen Funktionen
xSetCookie("cookiename","wert");
und
xGetCookie("cookiename");
nutzen.
Dann über ein Data-Variable:
Dazu müsstest du am einfachsten eine dem Nutzer zugeordnete data-variable anlegen, in der du den Wert dann speichern kannst.
Dann kannst du die Variable auch direkt im Plugin abfragen und den Code gar nicht erst ausführen, wenn der User das Plugin nicht will.
Richtiger - wenn man so will - wäre es daher, das über eine Plugin-Data-Variable zu lösen.
Allerdings greift die dataVar natürlich nicht bei Gästen.
Wie kann ich per Plugin System ein Javascript in den Kopfbereich (head) legen?
Gruß
Olaf
Hi Olaf,
ich drücke dir die Daumen daß ein Techniker dir eine Lösung posten kann.
Wenn ich es richtig verstanden habe, funktionieren inline-Elemente ja noch nicht richtig oder vollständig.
Derzeit ist es wohl nur möglich indem du das Template kopierst,
veränderst, in ein Plugin packst und dort die Ausführung des eigentlichen Templates verhinderst.
Aber das ist wohl nicht das was du wissen wolltest.
Zitat von mario4370 im Beitrag #11
Du meinst da wo der Header sichtbar ist Olaf?
Nein.
Ich meine den obersten Bereich einer HTML Datei.Den Kopfbereich,wo z.B. die Meta-Tags drin stehen.
Ich habe ein Javascript,um mein Lesezeichenfenster per Drag und Drop zu verschieben,das in diesen Bereich vorgeladen werden muß.
Jetzt habe ich das Script erstmal aus Testzwecken in die Kopfzeile gesetzt,was ich aber gerne mit den Plugin zusammen gemacht hätte.
Gruß
Olaf
Ich habe heute mal ein Vorhandenes Plugin etwas Umgebaut. Das Plugin Sie haben Post.
Bisher war es so das ein Ton nach Aktualisieren der Seite Hörbar war mit dem Text "Sie haben Post"
Ich habe dieses Plugin ein wenig erweitert und suche nun ein Paar Tester.
Am Liebsten mit Folgenden Templates
Gaia
Pro Silver
Standard
Am liebsten Je einen der das Besagte Templates hat.
Und es sollte die Möglichkeit gegeben sein ein weiteres Plugin zu Installieren.
Das Plugin kann von mir geschickt werden an 5 Admins zum Testen.
Ich hätte dann gerne ein Feedback. Dazu Brauche ich von den Testern die Forumsnummer damit ich euch das Plugin schicken kann. Zu Finden ist es nach dem Schicken Unter Admin/Plugin/Private Plugins
[[File:!BbCWMLg!mk~$(KGrHqYH-EIEqu+s,!W0BKuHjhV,rw~~_12.JPG|none|auto]]
Von da aus kann es dann Installiert werden.
Ich möchte von euch wissen ob alle Funktionen gehen.
Einstellbar ist Aktuell
Rechte
Grafik Wechseln
Grafik an/aus
Ton Wechseln
Ton an/aus
Position Grafik Rechts / Links
Position Grafik oben / unten
Pulsier Geschwindigkeit
Zoom Schritte Für die Vergrößerung
Pixel Anzahl für die Vergrößerung
Plugin Inhalt Grafik auf Mobil Geräte Unterdrücken.
Wer also Lust hat etwas zu Testen den Bitte ich sich hier zu Melden.
Hey Mario,
Das Problem ist, dass die Testforen meist kostenlos und somit mit 1 Plugin ausgestattet sind.
Falls nicht zwingend 2 Plugins benötigt werden, würde ich das gerne für dich testen - aber dann erst nächste Woche. Bin dieses WE schon komplett ausgebucht.
LG
River
PS: Im normalen Forum kann ich das mit dem Template-Wechsel nicht machen. Sorry.
- 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