Anderl72 0 Report post Posted November 27, 2003 Hallo, Ich möchte bei einer Auflösung von 800 x 600 ein anderes Logo einsetzen, als bei grösseren Auflösungen. Nun hab ich folgenden Code in die functions.php eingebaut: $ibforums->input['ScreenWidth'] = "<script type='text/javascript'>document.write(screen.width);</script>"; Die Abfrage über Javascript funktioniert gut, ich bekomme einen String mit der Angabe der Bildschirmbreite ausgeworfen. Doch irgendwie wills einfach nicht weiter. $ScreenWidth = $ibforums->input['ScreenWidth']; $ScreenWidth2 = settype($ScreenWidth,"integer"); $ibforums->input['LOGO'] = gettype($ScreenWidth); $ibforums->input['SWO'] = $ScreenWidth2; if ($ibforums->input['ScreenWidth'] != 800) { $ibforums->input['logo'] = "logoNormal.gif"; } else { $ibforums->input['logo'] = "logo800.gif"; } Ich hab schon versucht den string zu integer zu konvertieren. Irgendwie wirft es immer das logoNormal.gif aus. Ich weis einfach nicht mehr weiter, ihr vielleicht? Was mache ich falsch? Danke Anderl Share this post Link to post
Stefan 0 Report post Posted November 27, 2003 Also in $ibforums->input['ScreenWidth'] steht auf jeden Fall was drinne? Wenn das der Fall ist, versuch mal folgendes: $ibforums->input['ScreenWidth'] = intval($ibforums->input['ScreenWidth']); if ($ibforums->input['ScreenWidth'] != 800) { $ibforums->input['logo'] = "logoNormal.gif"; } else { $ibforums->input['logo'] = "logo800.gif"; } Bei deinen restlichen Sachen weiß ich nicht wirklich, was du damit willst. :) Share this post Link to post
Anderl72 0 Report post Posted November 27, 2003 hmm Danke für den Tip Stefan, leider haut es nicht hin. Ich hab (fast) schon alles durch. Was ich nicht verstehe ist $ScreenWidth = $ibforums->input['ScreenWidth']; $ibforums->input['LOGO'] = gettype($ScreenWidth); if ($ibforums->input['ScreenWidth'] != 800) { $ibforums->input['logo'] = "logoNormal.gif"; } else { $ibforums->input['logo'] = "logo800.gif"; } Wirft mir aus Füge ich noch folgende Zeile (davor) dazu: $ibforums->input['ScreenWidth'] = intval($ibforums->input['ScreenWidth']); Wirft es mir nun die ScreenWidth als "0" aus. Das ist schon mal das erste was ich nicht verstehe und das zweite ist, dass die ungleich Schleife ins Nirvana geht Schade, das wäre eine schöne Sache wenn es laufen würde Greetz Anderl Share this post Link to post
kingofcomedy 0 Report post Posted November 27, 2003 (edited) hmm Danke für den Tip Stefan, leider haut es nicht hin. Ich hab (fast) schon alles durch. Was ich nicht verstehe ist $ScreenWidth = $ibforums->input['ScreenWidth']; $ibforums->input['LOGO'] = gettype($ScreenWidth); if ($ibforums->input['ScreenWidth'] != 800) { $ibforums->input['logo'] = "logoNormal.gif"; } else { $ibforums->input['logo'] = "logo800.gif"; } Vielleicht die 800 mal in einfachen Anführungszeichen? :unsure: Edited November 27, 2003 by kingofcomedy Share this post Link to post
Anderl72 0 Report post Posted November 27, 2003 Nein leider nicht, strings werden in der Regel in Anführungszeichen gesetzt integers stehen in der Regel ohne. Danke Anderl Share this post Link to post
Anderl72 0 Report post Posted November 28, 2003 ich versteh gar nix mehr die Bildschirmweite wird mir über Javascript als String ausgeworfen und zwar mit dem richtigen Ergebnis (800,1024,1600 etc..) Wenn ich aber den String über intval zu einem integer konvertiere wird daraus das Ergebnis 0 Wie kann dann so etwas passieren? Share this post Link to post
Stefan 0 Report post Posted November 28, 2003 Vielleicht gibt dir die Javascriptfunktion noch Leerzeichen mit zurück. Mach mal folgendes: $ibforums->input['ScreenWidth'] = "#".$ibforums->input['ScreenWidth']."#"; Schau nun bei den Debuginformationen, ob die Zeichen direkt an der Zahl sind oder nicht. Ist nur eine Vermutung. :) Share this post Link to post
Anderl72 0 Report post Posted November 28, 2003 Schade, dass ist es auch nicht ... er gibt mir aus #1024# bzw. #800# Was mich noch mehr verwirrt ist wenn ich strlen($ibforums->input['ScreenWidth3']); aufrufe, wirft er mir als Stringlänge "69" aus??!?! Dabei sollte die Länge doch 4 bzw. 3 sein!!! :wallbash: Share this post Link to post
Stefan 0 Report post Posted November 28, 2003 Okay, probier mal das aus. preg_match ("#\d+#is", $ibforums->input['ScreenWidth'], $results); echo "Result: #".$result[0]."#"; echo strlen($result[0]); Share this post Link to post
Anderl72 0 Report post Posted November 28, 2003 Leider auch nicht Das Problem scheint im Javascript zu liegen. Nun habe ich auf einem anderen englischen Forum einen Hinweis gefunden: $screenWidth = "java script:document.write(screen.width);"; is a ltitle shorter and will work for outputting the values. the only way to pass the values along is through formdata, or a querystring. you can either have hidden form values that get passed on when the page is submitted, i.e <input name="height" type="hidden" value="java script:screen.height"> and access it as $_POST['height'], or pass it in a querystring with <form action="page.php?height=java script:screen.height&width=java script:screen.width" method="post"> and access the data with $_GET['height'] and $_GET['width'] Quelle: http://forums.devshed.com/archive/5/2003/5/2/45962 Formdata ok, verstanden aber was ist ein, uuuhhh querystring Da hab ich noch viel zum Spielen Danke für deine Hilfe Stefan Anderl Share this post Link to post
Stefan 0 Report post Posted November 28, 2003 Formdata ok, verstanden aber was ist ein, uuuhhh querystring Query ist eine Datenbankabfrage, demnach ist ein Querystring ein SQL Statement. $querystring = "SELECT * FROM bla"; Hast du dir eigentlich mal den HTML Quelltext angeschaut bei der Ausgabebox "FORM and GET Input"? Share this post Link to post
kingofcomedy 0 Report post Posted November 28, 2003 (edited) Formdata ok, verstanden aber was ist ein, uuuhhh querystring Query ist eine Datenbankabfrage, demnach ist ein Querystring ein SQL Statement. $querystring = "SELECT * FROM bla"; Ein Query_String kann aber auch folgendes sein: http://www.ipbsupport.de/board/index.php?act=Post&CODE=06&f=13&t=296&p=2470 Oder täusche ich mich? Edited November 28, 2003 by kingofcomedy Share this post Link to post
Stefan 0 Report post Posted November 28, 2003 Query ist ja mehr eine Abfrage und das von dir geschriebene ist in meinen Augen ja eher eine Variablenübergabe, aber das könnte auch gemeint sein. Im Endeffekt geht es ja nur um die Verarbeitung der Information. :) Share this post Link to post
Anderl72 0 Report post Posted November 29, 2003 ich geh noch die Wände hoch, irgendwie klappt es nicht mit der Übergabe der ScreenWidth Variable Der Wert geht dabei immer verlohren Jetzt probiere ich es mal die Variable über die lang datei weiterzugeben. Erstes sieht schon ganz vielversprechend aus, da der Wert aus der lang datei richtig rauskommt $ScreenWidth = $ibforums->input['ScreenWidth']; $ibforums->lang['ScreenWidth'] = preg_replace( "/<#ScreenWidth#>/" , "$ScreenWidth" , $ibforums->lang['ScreenWidth'] ); Nun bin ich nicht ganz vertraut was hier eigentlich passiert, kann mir das jemand kurz erklären? Was passiert wenn jemand gerade mit einer x1024 Auflösung auf dem Board surft, während ein neuer Surfer mit einer x800 Auflösung neu auf das Board kommt? Vielen Dank und schönes Wochenende wünscht Anderl Share this post Link to post
Stefan 0 Report post Posted November 29, 2003 Nun bin ich nicht ganz vertraut was hier eigentlich passiert, kann mir das jemand kurz erklären? Was passiert wenn jemand gerade mit einer x1024 Auflösung auf dem Board surft, während ein neuer Surfer mit einer x800 Auflösung neu auf das Board kommt? Da passiert gar nichts, denn die beiden Aufrufe werden völlig getrennt voneinander bearbeitet und somit sind auch die Werte aller Variablen voneinander unabhängig. Share this post Link to post
Anderl72 0 Report post Posted November 30, 2003 (edited) Immer noch keinen Erfolg Es ist (fast) zu verzweifeln. Über den "Form" Ansatz bekomme ich gleich gar kein Output? Hab ich etwas übersehen? vor dem Logo eine Form erstellen: <form name="logoform" method="post"> <input name="width" type="hidden" value="javascript:screen.width" /> und dann noch die Breite reinhauen: ibforums->input['ScreenWidth'] = $_POST['width']; Aber nichts passiert? Der "$_POST " Ansatz ist schon richtig, oder nicht? Edited November 30, 2003 by Anderl72 Share this post Link to post
Anderl72 0 Report post Posted November 30, 2003 Ok, bevor sich jemand noch den Kopf zerbricht ... ich habe eine reine Javascript Lösung, werde diese heute abend noch posten muss leider kurz wech. Danke an alle die sich mit mir Gedanken gemacht haben Greetz Anderl Share this post Link to post
Anderl72 0 Report post Posted November 30, 2003 So hier kommt nun mein Lösungsansatz. Ich habe 2 logos erstellt, eins für die Auflösung 800 x 600 und eins für alle anderen Auflösungen. Das 800*600 Logo ist das Standardlogo, es wird angezeigt wenn Javascript deaktiviert werden sollte. Ich nenne das logo für 800x600 logo800.gif und das Logo für alle anderen Auflösungen einfach nur logo.gif. Da ich noch mehrere funktionen über Javascript ausführe, habe ich ein externe .js Datei 1.) im Board wrapper muss das Javascript beim Laden initialisiert werden: dazu fügt man im Body tag ein: <body [B]onload="init()"[/B]> 2.) Als nächstes muss die Javascript Datei definiert werden. dazu geht man in die skin_global und fügt im BoardHeader am Anfang der Funktion ein: <script language='Javascript' type="text/javascript" src="font.js"></script> 3.) Man erstellt eine Text Datei mit dem Namen font.js (Wenn du einen anderen Dateinamen möchtest vergiss diesen nicht unter Punkt 2 anzupassen). In diese Datei kommt der folgende Javascript Kot function init(){ if (screen.width > "800") { document.getElementById("LOGO2").src = "/style_images/1/logo.gif"; } if (screen.width <= "800"){ document.getElementById("LOGO2").src = "/style_images/1/logo800.gif"; } } 4.) In der Skin_global ist das Original Logo logo.jpg durch das unter Punkt 3 genannte logo (logo800.gif) zu ersetzen. Im img tag ist als id="LOGO2" und name="LOGO2" einzutragen. 5.) Alle geänderten Dateien samt den Logos auf den Server laden. Vorschläge, die ohne Javascript auskommen sind äusserst willkommen. Viel Spass Anderl Share this post Link to post