Ankündigung

Einklappen
Keine Ankündigung bisher.

SELECT mit neuem Pfad direkt ausloesen

Einklappen

Neue Werbung 2019

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

  • SELECT mit neuem Pfad direkt ausloesen

    Hallo, ich habe folgende kleine Sprachauswahl erstellt:
    PHP-Code:
    <?php
    $xlang 
    $_GET["xlang"];
    if(
    $xlang == 'sp')
       { 
    $sellangsp 'selected'; }
    elseif(
    $xlang == 'en')
       { 
    $sellangen 'selected'; }
    else   
       { 
    $sellangde 'selected'; }
    ?>
    <form action="<?php echo $xlang?>/i.php" method="get"">

    Bitte wähle eine Sprache aus:
    <select name="xlang" onChange=document.forms[0].submit()>
    <option value="de" <?php echo $sellangde?>>Deutsch</option>
    <option value="en" <?php echo $sellangen?>>Englisch</option>
    <option value="sp" <?php echo $sellangsp?>>Spanisch</option>
    </select>

    </form>
    Das klappt auch prima. Nur in der form action Zeile kommt natuerlich die alte xlang Variable, da diese Zeile vor dem select erstellt wird.
    Hat jemand einen Tip fuer mich, wie ich es hinbekommen kann, dass die Datei i.php nach dem Select aus dem richtigen Verzeichnis aufgerufen wird?

    Danke fuer Eure Unterstuetzung!

    Vagabundo

  • #2
    Mit Javascript
    von Stackoverflow:
    https://stackoverflow.com/questions/...-select-option
    HTML-Code:
    <script> document.getElementById('selectid').onchange = function(){ document.getElementById('form').action = '/'+this.value; } </script>

    Kommentar


    • #3
      Oder per PHP mit header weiterleiten
      sorry, shift-taste kaputt

      Kommentar


      • #4
        Solltest du mal mehr Sprachen zur auswahl haben müssen, bekommst du schnell eine lange Schlange von Code á la "diese_sprache = select". Besser ist es, alle Sprachen in einen Array zu tun und dann eine Funktion darüberlaufen zu lassen. Dann ist es egal, ob eine oder 100 Sprachen

        PHP-Code:
        <?php
        $x_lang 
        "no";

        $auth_lang = [
                    
        'de' => 'Deutsch',
                    
        'en' => 'English',
                    
        'es' => 'Espanol',
                    
        'no' => 'Norsk',
                    
        'nl' => 'Netherlands',
                    
        'dk' => 'Dansk',
                    
        'tr' => 'Türk'
                    
        ];

        function 
        createLangOptions ($func_auth_lang$func_x_lang)
        {
            if (
        array_key_exists($func_x_lang$func_auth_lang)) {

                foreach (
        $func_auth_lang as $key => $val) {
                    
        $is_selected NULL;

                    if (
        $func_x_lang == $key) {
                        
        $is_selected 'selected';
                    }
                    echo 
        "<option value='" $key "' " $is_selected ">" $val "</option>\n";
                }
            }
        }

        ?>

        <form action="... whatever ..." method="get">
        Bitte wähle eine Sprache aus:
        <select name="x_lang" onChange=document.forms[0].submit()>
            <?php createLangOptions($auth_lang$x_lang);?>
        </select>
        </form>

        Kommentar


        • #5
          Hallo und danke fuer die Hineise!

          ich habe es jetzt folgendermassen geaendert, aber es laedt immer noch nicht die neue Seite:

          PHP-Code:
          <html>
          <head>
          <script type="text/javascript">
          changeAction = function()
             { 
             document.getElementById('sprachwahl').action = select.value; 
             } 
          </script>
          </head>
          <body>
          Hauptindex<br><br>
          <?php
          if(isset($_GET["xlang"]))
             { 
          $xlang $_GET["xlang"]; }
          else
             { 
          $xlang 'de'; }
          $sellangde '';
          $sellangen '';
          $sellangsp '';
          if(
          $xlang == 'sp')
             { 
          $sellangsp 'selected'; }
          elseif(
          $xlang == 'en')
             { 
          $sellangen 'selected'; }
          else   
             { 
          $sellangde 'selected'; }
          ?>

          Bitte wähle eine Sprache aus:<br>
          <form name="sprachwahl" id="sprachwahl" method="get" action="">
          <select name="langid" onChange="changeAction(this)">
          <option value="de/i.php&xlang=de" <?php echo $sellangde?>>Deutsch</option>
          <option value="en/i.php&xlang=en" <?php echo $sellangen?>>Englisch</option>
          <option value="sp/i.php&xlang=sp" <?php echo $sellangsp?>>Spanisch</option>
          </select>

          </form>

          </body></html>
          Ich habe leider mit Javascript sehr wenig Erfahrung un braeuchte deshalb noch einmal eure Hilfe:
          Die neue Seite wird immer noch nicht aufgerufen bzw. geladen.

          Vagabundo

          Kommentar


          • #6
            Javascript sollte immer am Ende der Datei kommen, aber am besten ist es Javascript in eine separate Datei auszulagern.
            Mit dieser Vorlage solltest du aber alles hinkriegen was du möchtest :
            HTML-Code:
            <?php
            $x_lang = "no";
            
            $auth_lang = [
                        'de' => 'Deutsch',
                        'en' => 'English',
                        'es' => 'Espanol',
                        'no' => 'Norsk',
                        'nl' => 'Netherlands',
                        'dk' => 'Dansk',
                        'tr' => 'Türk'
                        ];
            
            function createLangOptions ($func_auth_lang, $func_x_lang)
            {
                if (array_key_exists($func_x_lang, $func_auth_lang)) {
            
                    foreach ($func_auth_lang as $key => $val) {
                        $is_selected = NULL;
            
                        if ($func_x_lang == $key) {
                            $is_selected = 'selected';
                        }
                        echo "<option value='" . $key . "' " . $is_selected . ">" . $val . "</option>\n";
                    }
                }
            }
            
            ?>
            
            <form id="languages" method="get">
            Bitte wähle eine Sprache aus:
            <select name="x_lang" onChange="lang_submit(this)">
                <?php createLangOptions($auth_lang, $x_lang);?>
            </select>
            </form>
            <script>
            function lang_submit(lang_obj) {
                document.getElementById('languages').action = '/'+lang_obj.value+'.php';
                document.forms[0].submit();
            }
            </script>
            ist natürlich noch nicht perfekt, aber den Rest überlasse ich dir.
            P.S Ein Teil des Codes habe ich von der Person die vor mir kommentiert hat.


            Kommentar


            • #7
              Also ich habe mal gelernt, dass JS im Header der HTML Datei eingebunden wird.
              Der Trick ist zu warten, bis der DOM vollständig geladen ist (window.onload).
              Und onchange benutzt man heutzutage auch eher sellten sondern nutzt EventListener.
              Also:

              PHP-Code:
              <script type="text/javascript">
                
              window.onload = function() {
                  var 
              langSelect document.getElementById('x_lang');
                  
              langSelect.addEventListener("change", function(){
                      var 
              form document.getElementById('languages');
                      
              form.action '/'+langSelect.value+'.php';
                      
              form.submit();
                  });
                };
              </script> 
              sorry, shift-taste kaputt

              Kommentar


              • #8
                Zitat von Meister1900 Beitrag anzeigen
                Also ich habe mal gelernt, dass JS im Header der HTML Datei eingebunden wird.
                Also soviel ich weiß ist es im modernem JS gängig den JS so ziemlich am Ende des HTML-Dokuments zu stellen.

                HTML-Code:
                <html>
                    <head>
                        <!-- Header-Teil -->
                    </head>
                    <body>
                        <!-- Ganz
                                    viel
                                        Code. -->
                    <script src="pfad/zum/js"></script>
                    </body>
                </html>
                Somit wird garantiert der gesamte Code geladen und JS kann auf alle Elemente zugreifen. Wie ich dann verstehe, kann man window.onload sich dann sparen.

                Kommentar


                • #9
                  Danke an alle,

                  ich habe es jetzt hinbekommen und es scheint einwandfrei zu funktionieren.

                  Tolles Forum - tolle Hilfe!

                  Vagabundo

                  Kommentar

                  Lädt...
                  X