Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
Anderl72

Dynamische Logo

Recommended Posts

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

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

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 ScreenWidth1.jpg Füge ich noch folgende Zeile (davor) dazu:
$ibforums->input['ScreenWidth'] = intval($ibforums->input['ScreenWidth']);

Wirft es mir nun die ScreenWidth als "0" aus.

ScreenWidth2.jpg

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

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 by kingofcomedy

Share this post


Link to post

ich versteh gar nix mehr

die Bildschirmweite wird mir über Javascript als String ausgeworfen und zwar mit dem richtigen Ergebnis (800,1024,1600 etc..) :huh: Wenn ich aber den String über intval zu einem integer konvertiere wird daraus das Ergebnis 0 :wacko::wacko::blink::yeahright::blush:

Wie kann dann so etwas passieren?

Share this post


Link to post

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

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::wallbash: :wallbash:

Share this post


Link to post

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

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 :blush:

Da hab ich noch viel zum Spielen :w00t:

Danke für deine Hilfe Stefan

Anderl

Share this post


Link to post

Formdata ok, verstanden aber was ist ein, uuuhhh querystring :blush:

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

Formdata ok, verstanden aber was ist ein, uuuhhh querystring  :blush:

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 by kingofcomedy

Share this post


Link to post

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

ich geh noch die Wände hoch, irgendwie klappt es nicht mit der Übergabe der ScreenWidth Variable :( Der Wert geht dabei immer verlohren :angry:

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

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

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 by Anderl72

Share this post


Link to post

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

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×