Variablen übergabe...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Variablen übergabe...

    Also ich habe da ein Probleme und mehrer Lösungen im Hinterkopf - jedoch weiss ich nicht so recht so es hakt.

    Hintergrund: Eine Website die 3 sprachig aufgebaut ist. Besteht aus drei Elementen - Headmenü, Submenu und Contents. Nun hab ich die Indexdatei so aufgebaut das als erstes gebprüft wird ob eine Sprache gewählt ist:

    session_start();
    if (!isset($lang)||empty($lang)){
    $lang = "ger";
    session_register($lang);
    } else {
    session_register($lang);
    }


    So dachte ich mir das - falls keine Sprache gesetzt ist Default wert - Deutsch. So. Nun kann man im Headmenu einen Punkt auswählen (News) - Daraufhin wird die Index.php neu geladen mittels php_self &submenu=news

    Als Subemenu wird news includiert - hier ist auch wieder diese Sprachabfrage drin - So wenn nun der User die Sprache ändern möchte klickt er auf ein entsprechendes Fähnchen - die index.php wird geöffnet mit ?lang=eng z.B. - Problem - der User ist wieder auf der startseite.

    Also habe ich mir gedacht ich speicher einfach die aktuelle URL - weil ja hier alles drin steht wo er gerade ist: Submenu ect. REQUEST_URI - und hänge hier einfach die Sprache dran - REQUEST_URI?lang=eng - das geht ja auch nur wenn der User nun nochmal die sprache wechselt wir daraus dann REQUEST_URI?lang=eng&lang=ger - also müsste ich den alten URL String nach lang=*** durchsuchen und mit dem neuen ersetzten. Das wär eine Möglichkeit...

    Es ist meine erste multilinguale Seite - ich benutze Sprachfiles - ger.inc - eng.inc - rus.inc hier stehen die entsprechenden beiträge dann in den verschiedenen sprachen drin.

    Bei http://www.alphatranslation.com/alpha/inhalt.php ist das z.B. sehr schön gelöst mit der Sprache... wie wurde das hier gemacht? So will ich das auch - aber ich machs mir meistens zu kompliziert.

  • #2
    registriere $lang nur, wenn es nicht definiert ist.

    wenn $lang schon definiert ist, brauchst/ sollst(?) du das nicht noch einmal machen.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Kling logisch - würd ich auch so machen... hab ichs anders gemacht bin gleich wieder da.

      Kommentar


      • #4
        ja, du hasttest noch ein else zweig....

        PHP-Code:
        session_start();
        if (!isset(
        $lang)||empty($lang)) {
          
        $lang "ger";
          
        session_register("lang");

        wenn der user seine $lang ändert, ändert sich ja auch der wert in der session.

        was passiert aber, wenn der user $lang definiert hat durch übergabe in der url dies aber nicht in der session gespeichert ist? mist. das ist noch nicht geprüft. und kannst du so machen:

        PHP-Code:
        if (!session_is_registered("lang") {
          
        session_register("lang");

        das letzte kannst du aber in den else zweig packen.

        PHP-Code:
        session_start();
        if (!isset(
        $lang)||empty($lang)) {
          
        $lang "ger";
          
        session_register("lang");
        }
        else {
          if (!
        session_is_registered("lang") {
            
        session_register("lang");
          }

        so müsste es gehen.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Hmmm also ich hab das jetzt so abgeändert:

          if (!isset($lang)||empty($lang)){
          $lang = "ger";
          } else {
          session_register($lang);
          }

          Also wenn $lang nicht existiert oder leer ist wird auf ger gesetzt. Falls doch wird sie gespeichert.

          So nun wird aber bei jedem klick egal worauf die URL wieder aufgerufen sprich all meine HRef-s sehen so aus:
          href = "<?echo $_SERVER['PHP_SELF'];?>?title=TPS%20::%20Kontakt-EMail&submenu=kontakt&content=email&kontakt=email">

          (Kleine erklärung: Title übergibt den Titel der Seite, Submenu - das submenu, Content den eigentlichen inhalt, kontakt sagt das im inhalt das email forumlar angezeigt werden soll)

          wird dadurch das die komplette URL aufgerufen wird die Sessionvariable nicht gespeichert? Weil nach einem Klick auf irgendein Menüelement springt die sprache wieder zurück auf ger...


          Ah hab getippt während Du mir tipps gegeben hast - probier das mal aus ... danke.
          Zuletzt geändert von NiLS-Da-BuBi; 22.01.2003, 16:45.

          Kommentar


          • #6
            Original geschrieben von NiLS-Da-BuBi
            Also wenn $lang nicht existiert oder leer ist wird auf ger gesetzt. Falls doch wird sie gespeichert.
            siehe erster post von mir. nicht noch einmal speichern ...

            Original geschrieben von NiLS-Da-BuBi
            Ah hab getippt während Du mir tipps gegeben hast - probier das mal aus ... danke.
            ok. das teil von mir sollte eigentlich alles varianten abfangen und entsprechend behandeln.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Jetzt wirds mysteriös... Also ich hab jetzt folgenden Code von Dir übernommen:

              PHP-Code:
              if (!isset($lang)||empty($lang)) {
                  
              $lang "ger";
                  
              session_register("lang");
              } else {
                  if (!
              session_is_registered("lang")) {
                      
              session_register("lang");
                  }

              Ähm jetzt wirds aber ganz seltsam. Öffne ich nun die Seite über die index.php - kann ich die Sprache nicht wechseln - der wert ger ist in $lang gespeichert und lässt sich über die normale Variablenübergabe vom Browser wohl nicht ändern ( http://blind/index.php?lang=eng ) die Variable behält ger - ruf ich die Seite allerdings direkt so auf - wird eng in der Session gespeichert, logisch. So nun kommt aber das merkwürdige - das ist nur beim IE 5 so... bei dem IE 6 auf meinem Laptop kann ich ruhig die URL direkt mit eng aufrufen - nach einem Klick auf einen Menüpunkt werden die darauffolgenden seiten deutsch angezeigt - also wird hier die session nicht gespeichert... ich verzweifel...

              Kommentar


              • #8
                session_start() hast du aber schon vorher im code drin, oder hast du das rausgenommen? das muss auf jeden fall noch vor meinem code rein.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  reicht das nicht aus?
                  PHP-Code:
                  session_start();
                  if (!
                  session_is_registered("lang") {
                    
                  $lang="ger";
                    
                  session_register("lang");

                  Ansonsten werden auf deiner oben genannten Seite gar keine Sessions für die Sprachsteuerung benutzt.
                  Die machen das so:
                  PHP-Code:
                  if (!isset($lang)||empty($lang)) {
                      
                  $lang "ger";
                  }
                  echo 
                  "<a href=index.php?lang=".$lang.">bla</a>"
                  Die hängen den Sprachparameter an jeden Link.
                  Gruß oms
                  {brigens Ein Kezboard/Treiber ist v;llig [berfl[ssig!

                  Kommentar


                  • #10
                    Jaja steht gaaanz oben.

                    Kommentar


                    • #11
                      Original geschrieben von oms
                      reicht das nicht aus?
                      aus meiner sicht reicht es nicht.
                      wenn man z.b. einen direktlink hat der lang=eng beinhaltet, würde dann auch direkt lang=ger in der session gespeichert. daher noch das else bei mir.

                      Original geschrieben von oms
                      Ansonsten werden auf deiner oben genannten Seite gar keine Sessions für die Sprachsteuerung benutzt.
                      Die hängen den Sprachparameter an jeden Link.
                      diese variante ist natürlich auch machbar. wenn man es über sessions macht, kann man die übergabe auch vernachlässigen. oder man muss zumindest nicht jedesmal daran denken.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Ansonsten werden auf deiner oben genannten Seite gar keine Sessions für die Sprachsteuerung benutzt.
                        Die machen das so:
                        PHP-Code:
                        if (!isset($lang)||empty($lang)) {
                            
                        $lang "ger";
                        }
                        echo 
                        "<a href=index.php?lang=".$lang.">bla</a>"
                        Die hängen den Sprachparameter an jeden Link.
                        Gruß oms [/B]
                        Patsch - - so hatt ichs ja auch vor - nur ich sag ja - die simplen sachen. Aber nun gibt sich mir noch ein Problem.

                        Der On-Demand Sprachwechsel.

                        Ich hab eine kleine Include Datei in der ich meine drei Fähnchen habe die die Index.php?lang=x entsprechend der Sprachwahl dann öffnen - so nun ist der Besucher gerade auf der Kontaktseite und will eine eMail schreiben - sein Deutsch ist eingerostet und er weiss leider nicht mehr was einen PLZ ist... also klickt er auf das GB-Fähnchen - so nun ist zwar alles umgesprungen auf Englisch - aber er steht wieder auf der Indexseite - also ganz am Anfang...

                        So hier könnte ich ja nun im grunde die REQUEST_URI benutzten und dann da hinten einfach die neue Sprache dranhängen - Problem hier: Die Sprachen werden angehängt also säh das dann so aus: index.php?lang=ger&lang=eng&lang=ger... u.s.w. das ist ja doof - wie kann ich also den string zerlegen? Hmmm mit substr könnte ich die letzten Variablen abschneiden also

                        PHP-Code:
                        <? 
                        $url = $_SERVER['REQUEST_URI'];
                        substr($url, 0, -8);
                        echo "<a href=\"".$url."lang=".$lang"\">";
                        ?>
                        da ich als sprachkennung immer 3 zeichen ausgebe und lang immer am ende der Adresse steht kann ich 8 zeichen abschneiden und die neuen schreiben... gibts da auch ne elegantere Lösung... naja das war nur Theoretisch mal schauen obs klappt.

                        Kommentar


                        • #13
                          @Abraxax ...ja gut... überredet

                          diese variante ist natürlich auch machbar
                          ...is eben Geschmackssache.

                          Wenn ich bei den Links aber immer die Sprache angebe, kann sich eventuell noch ein Suchrobot da anständig durchhangeln. Ob der die URL-Parameter mag, ist dahingestellt. Aber das ist einen gaaaanz andere Geschichte. *abschweif*
                          {brigens Ein Kezboard/Treiber ist v;llig [berfl[ssig!

                          Kommentar


                          • #14
                            @NiLS-Da-BuBi

                            mache das lieber so ... und fertig ...

                            PHP-Code:
                            <? echo "<a href=\"".$PHP_SELF."?lang=".$lang"\">"; ?>

                            das gleiche kannst du auch verwenden, wenn du $lang in der session speicherst. nur beim sprachwechsel wird lang übergeben. da $lang schon in der session ist, speichert er nicht neu. der vorhandene wert sollte aber überschrieben werden.

                            wenn nicht, hätte ich dafür auch noch eine lösung im kopf. teste das aber erst einmal ...
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar


                            • #15
                              Original geschrieben von oms
                              ....eventuell noch ein Suchrobot da anständig durchhangeln. Ob der die URL-Parameter mag, ist dahingestellt. ...
                              für suchrobots sollte man sowieso keine paramter verwenden. die werden teilweise ignoriert. oder aber auch diese seiten werden nicht im index aufgenommen, da sie als dynamisch erkannt worden sind.

                              man kann aber eine erste verzeichnisebene machen. /eng/.... oder /ger/... oder so eben. wie du schon sagtest ist das aber geschmackssache.
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X