Aktuelle Url bestimmen / Sprache umschalten

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Helmut
Mitglied
Beiträge: 2047
Registriert: 27.12.2002 20:35
Wohnort: Augsburg
Kontaktdaten:

Aktuelle Url bestimmen / Sprache umschalten

Beitragvon Helmut » 31.03.2008 11:44

Hallo,

ich suche schon eine ganze Weile, finde aber irgendwie keine Lösung dafür.

Ich möchte gerne raus bekommen, auf welcher Seite ich mich aktuell befinde. In der Browserzeile steht z.B. "http://www.phpbb.de/viewforum.php?f=6" drinnen, aber wie kann ich es in phpbb3 abfragen?

Gruß Helmut
Zuletzt geändert von Helmut am 13.09.2008 15:40, insgesamt 1-mal geändert.
Ich bin nicht ganz dicht.... na und.

Meine HP

Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 15341
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitragvon Dr.Death » 31.03.2008 12:44

Hallo,

schau mal in die "viewonline.php"

Dort der Bereich ab:

Code: Alles auswählen

// Get user list


Erst wird ausgelesen, welche User online sind und dann welche session_page gerade aktiv ist.

Weiter unten wird ein

Code: Alles auswählen

   switch ($on_page[1])


abgefragt.

Dort wird ermittelt welche Seite der User gerade betrachtet.

Helmut
Mitglied
Beiträge: 2047
Registriert: 27.12.2002 20:35
Wohnort: Augsburg
Kontaktdaten:

Beitragvon Helmut » 31.03.2008 12:57

Hallo Dr.Death,

danke für deine Antwort, aber das bringt mich jetzt nicht wirklich weiter. So wie ich gesehen habe, geht das nur für die Seiten, welche sich in der Liste (z.B. case 'index':) befinden.

Ich bräuchte das für meine Homepage, da ich das für die Umschaltung der Sprache nutzen will und so auf der aktuellen Seite bleibe. Ich habe mehrere hundert Seiten eingebunden, die müsste ich dann theoretisch alle dort eintragen was schon eine Menge Arbeit ist. Daher suche ich nach einer einfacheren Lösung bzw. könnte man das nicht auch so machen, dass bei case '': alle Angaben aus der Datenbank kommen?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.

Meine HP

Benutzeravatar
tas2580
Ehemaliger
Beiträge: 2803
Registriert: 01.07.2004 05:42
Wohnort: /home/tas2580
Kontaktdaten:

Beitragvon tas2580 » 31.03.2008 13:25

Wie währe es damit?

Code: Alles auswählen

$_SERVER['SCRIPT_FILENAME']
$_SERVER['REQUEST_URI']
$_SERVER['PHP_SELF']
$_SERVER['QUERY_STRING']

http://de3.php.net/reserved.variables
Heute ist ein guter Tag um dein Forum zu testen.
Ehemaliger Benutzername: [BTK] Tobi

Helmut
Mitglied
Beiträge: 2047
Registriert: 27.12.2002 20:35
Wohnort: Augsburg
Kontaktdaten:

Beitragvon Helmut » 31.03.2008 16:25

Hallo Tobi,

danke dir für den Tipp, hätte da eigentlich selber drauf kommen müssen. :oops:

Ich habe es jetzt testweise so gemacht, wobei das immer noch nicht die Lösung ist. Für die Themenseiten geht es ganz gut, aber sobald eine $sid angehängt ist, geht es nichtmehr, da lang=* in der Url zwischen drinnen steckt.

funktions.php

Code: Alles auswählen

   //SVI language switch   
   $user_lang = request_var('lang', $user->lang_name);

   $sql = 'SELECT lang_id, lang_iso, lang_local_name
      FROM ' . LANG_TABLE . "
      ORDER BY lang_id";   
   $result = $db->sql_query($sql);
   
   while ($lang_row = $db->sql_fetchrow($result))
   {
      $iso = $lang_row['lang_iso'];
      $lang_name = $lang_row['lang_local_name'];

      $template->assign_block_vars('langswitch', array(   
         'LANGSWITCH'      => $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?lang=" . $iso,                  
         'FLAGSWITCH'      => append_sid("{$phpbb_root_path}styles/" . $user->theme['theme_path'] . '/theme' . "/images/flags/" . $iso .".png"),
         'ALTSWITCH'      => $lang_name,
      ));         
   }
   $db->sql_freeresult($result);
   //-------------------------



overall_header.html

Code: Alles auswählen

            <!-- Language -->            
            <div>
            <!-- BEGIN langswitch -->
            <a href="http://{langswitch.LANGSWITCH}"><img src="{langswitch.FLAGSWITCH}" alt="Flagge {langswitch.ALTSWITCH}"  /></a>&nbsp;
            <!-- END langswitch -->                        
            </div>
            <br />
            <!-- Language -->



@Dr.Death
Aber trotzdem würde mich es interessieren, wie ich meine ganzen Seiten am einfachsten in die viewonline.php bringe. Das wäre für eine Statistik z.B. "Wer war wo online" interessant.


[EDIT]
so, ich habe es jetzt auch für die Foren hinbekommen, aber eine Sache gefällt mit noch nicht dabei. Ich verwende dabei preg_replace(, aber da habe ich noch ein kleines Problem damit, so sieht es jetzt aus:

Code: Alles auswählen

   //SVI language switch   
   $user_lang = request_var('lang', $user->lang_name);

   $url_lang = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
   
   $sql = 'SELECT lang_id, lang_iso, lang_local_name
      FROM ' . LANG_TABLE . "
      ORDER BY lang_id";   
   $result = $db->sql_query($sql);
   
   while ($lang_row = $db->sql_fetchrow($result))
   {
      $iso = $lang_row['lang_iso'];
      $lang_name = $lang_row['lang_local_name'];

      $lang_in[1] = '/=en/';
      $lang_in[2] = '/=de/';
      $lang_out = '='.$iso;

      $url_lang = preg_replace($lang_in, $lang_out, $url_lang);

      $template->assign_block_vars('langswitch', array(   
         'LANGSWITCH'      => $url_lang,                  
         'FLAGSWITCH'      => append_sid("{$phpbb_root_path}styles/" . $user->theme['theme_path'] . '/theme' . "/images/flags/" . $iso .".png"),
         'ALTSWITCH'      => $lang_name,
      ));         
   }
   $db->sql_freeresult($result);
   //-------------------------

Ich möchte ganz gerne die Ersetzung für $lang_in[1] = '/=en/'; für die Sprache (de, en, ....) die Variable $user_lang dafür verwenden, dort steht die aktuelle Usersprache drinnen. Wie bekomme ich die in die $lang_in rein, ohne dass ich eine Fehlermeldung bekomme?


[EDIT2]
So, ich habs rausbekommen, es muss so aussehen: $lang_in = "~=$user_lang~i";

[EDIT3]
Hier noch ein kleiner Nachtrag. Wenn keine lang=* angegeben war, dann konnte man auch keine Sprache wählen. Der Teil kommt noch dazu, um die lang=* anzuhängen.

Code: Alles auswählen

   // Wenn keine lang= angegeben wurde   
   $lang_in = "~=$user_lang~i";
   if (preg_match($lang_in, $url_lang))
   {
      $url_lang;
   }
   else
   {
      $url_lang = $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?lang=" . $user_lang . '&amp;' . $_SERVER['QUERY_STRING'];
   }



Gruß Helmut
Ich bin nicht ganz dicht.... na und.

Meine HP

Helmut
Mitglied
Beiträge: 2047
Registriert: 27.12.2002 20:35
Wohnort: Augsburg
Kontaktdaten:

Beitragvon Helmut » 13.09.2008 14:25

Hallo,

so, ich muss das Thema doch nochmal aufgreifen. Also die Sache mit der Sprachumschaltung sowohl für Gäste als auch für eingeloggte User funktioniert einwandfrei, aber ich habe einen kleinen Schönheitsfehler entdeckt. Manchmal wird mehrfach &lang=de in den Link eingefügt, kommt aber nicht immer vor, das sieht dann so aus:

Code: Alles auswählen

http://localhost/phpBB3/viewforum.php?lang=de&lang=de&lang=de&f=1


Der Code dazu in der functions.php sieht so aus:

Code: Alles auswählen

   //SVI language switch   
   $user_lang = request_var('lang', $user->lang_name);

   $url_lang = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
   
   // Wenn keine lang= angegeben wurde   
   $lang_in = "~=$user_lang~i";
   if (preg_match($lang_in, $url_lang))
   {
      $url_lang;
   }
   else
   {
      $url_lang = $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?lang=" . $user_lang . '&amp;' . $_SERVER['QUERY_STRING'];
   }

   //Umschalten von lang=
   $sql = 'SELECT lang_id, lang_iso, lang_local_name
      FROM ' . LANG_TABLE . "
      ORDER BY lang_id";   
   $result = $db->sql_query($sql);
   
   while ($lang_row = $db->sql_fetchrow($result))
   {
      $iso = $lang_row['lang_iso'];
      $lang_name = $lang_row['lang_local_name'];
      
      $lang_in = "~=$user_lang~i";         
      $lang_out = '='.$iso;

      $url_lang_2 = preg_replace($lang_in, $lang_out, $url_lang);

      $template->assign_block_vars('langswitch', array(   
         'LANGSWITCH'      => $url_lang_2,                  
         'FLAGSWITCH'      => append_sid("{$phpbb_root_path}styles/" . $user->theme['theme_path'] . '/theme' . "/images/flags/" . $iso .".png"),
         'ALTSWITCH'      => $lang_name,
      ));         
   }
   $db->sql_freeresult($result);
   //-------------------------

Vermutlich hängt es mit dem ersten Teil für die Erkennung ob "&lang=de" schon in den Link eingefügt ist oder nicht, zusammen. Ich komme leider nicht dahinter, warum das manchmal mehrfach drinnen steht, funktionieren tut es trotzdem. Vielleicht kann mir jemand da weiterhelfen, die Ursache für dieses Verhalten zu finden.

Gruß Helmut :wink:
Ich bin nicht ganz dicht.... na und.

Meine HP

Helmut
Mitglied
Beiträge: 2047
Registriert: 27.12.2002 20:35
Wohnort: Augsburg
Kontaktdaten:

Re: Aktuelle Url bestimmen / Sprache umschalten

Beitragvon Helmut » 08.02.2009 12:45

Hallo,

ich möchte das Thema nochmal aufgreifen, da mich eviL<3 auf ein mögliches Sicherheitsproblem aufmerksam gemacht hatte.

Ich verwende für meinen neuen Mod Quickly language change 0.0.1 (Vorabversion) unter anderem $_SERVER['QUERY_STRING'] und dazu meinte eviL<3, dass sich da HTML injizieren lässt (sogenanntes XSS - cross site scripting). Er schlägt mir vor, parse_str() zu verwenden, aber ich komme damit nicht so richtig klar.

Wäre nett, wenn mir jemand ein Beispiel nennen würde, wie ich parse_str() genau anwenden muss. :wink:

[EDIT]
Ich habe es jetzt mit parse_url() gelöst, das sollte eine mögliche Sicherheitslücke schließen.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.

Meine HP


Zurück zu „[3.0.x] Mod Bastelstube“