Seite 1 von 1

Javascript und Sprachauswahl

Verfasst: Fr 28. Apr 2006, 18:53
von Uwe
Ich weiss garnicht, ob ich mich schon wieder schämen muss ...

Wie kann ich abfragen, ob der Browser Javascript unterstützt? Den noscript-Tag kenne ich.

Es geht um den Sprachwähler (Pulldown). Der funzt nur mit js. In noscript-Bereich habe ich die js-freie Variante drin.

Code: Alles auswählen

<?php

// alle activen Sprachen ermitteln
#SELECT idlang, online FROM ".$cfg["tab"]["art_lang"]." WHERE idart=$idart ORDER BY idlang ASC (neu)
#SELECT idlang, name FROM cms_lang WHERE active=1 ORDER BY idlang
$query = "SELECT idlang, name FROM cms_lang WHERE active=1 ORDER BY idlang";
// execute query
$db->query($query);

// Listbox erstellen, javascript wird aktiv wenn Wert sich aendert
echo '<select style="width:145px; border: 0px;" name="changeactivelang" onchange="top.location.href = this.value">';

while ( $db->next_record() ) {
   // idlang, name ermitteln
   $c_idlang = $db->f("idlang");
   $c_name = $db->f("name");

   // aktuelle Sprache wird selected
   if ($c_idlang == $lang) {
      $lang_sel = "selected";
   } else {
      $lang_sel = "";
   }

   // Link fuer das wechseln der Sprache wird in value geschrieben
   echo '
   <option value="front_content.php?client='.$client.'&changelang='.$c_idlang.'&parent='.$parent.'&subid='.$subid.'&idcat='.$idcat.'" '.$lang_sel.'  >'.$c_name.'</option>';
}
   echo '</select>';
?> 
<noscript>
<?php 
//Konfiguration... 
//Diese Zeilen konfigurieren das Modul... 
$sprache["1"] = "deutsch"; 
$sprache["2"] = "english"; 


//AB HIER NICHTS MEHR ÄNDERN... 
$mydb = new DB_Contenido; 

$mydb ->query ("SELECT idlang, online FROM ".$cfg["tab"]["art_lang"]." WHERE idart=$idart ORDER BY idlang ASC"); 

while ($mydb -> next_record()) 
{
   while(list($lang_id,$sprache_pfad) = each($sprache)) 
   { 
      if (($lang != ($mydb->f("idlang"))) and (($mydb->f("idlang")) == $lang_id) and (($mydb->f("online")) == 1)) 
      { 
         echo "<a href=".$sess->url("front_content.php?client=$client&changelang=".($mydb->f("idlang"))."&idart=$idart"); 
         echo ">".$sprache_pfad."</a>&nbsp;"; 
      } 
   } 
   reset($sprache); 
}
?>
</noscript>
Das Modul ist sicher auch verbesserungswürdig, da man auch im noscript-Bereich die Sprachen dynamisch auslesen kann und im Pulldown-Bereich sicher nur die Sprache anzeigen lassen kann, die auch erreichbar ist.

Hat jemand nen Tipp??

Viele Grüsse vom Bodensee, Uwe

Verfasst: Sa 29. Apr 2006, 00:13
von HerrB
http://de.selfhtml.org

Ansonsten: So jedenfalls nicht. Du musst einen JS-Block definieren, der wiederum die Select-Box ausgibt.

Kann der Browser JS, erscheint die Select-Box und eine Sprache kann ausgewählt werden. Kann der Browser kein JS, wird nur der noscript-Bereich ausgeführt.

Gruß
HerrB

Verfasst: Sa 29. Apr 2006, 07:45
von php0815
Habe sowas mal mit stylesheet auswahl für eine statische seite gemacht vieleicht kannst du es ja umbauen es wird ein Cookie gesetzt damit beim nächsten besuch gleiche die ausgewählte css wieder angezeigt wird.
ist zwar nicht schön programiert aber es funzt.

index.php

Code: Alles auswählen

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
   <head>
      <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
      <title>test</title>
   </head>
   <body bgcolor="#ffffff" style="overflow:hidden">
<?php
if (!isset($_COOKIE['color']))
{
   echo'<link rel="stylesheet" href="css/hellblaugruen.css" type="text/css" title="hellblaugruen" >';
}
else
{
   $farbe = $_COOKIE['color'];

   switch($farbe)
   {
      case blassgruen:
         echo'<link rel="stylesheet" href="css/blassgruen.css" type="text/css" title="blassgruen" >';
      break;
      case blasspflaume:
         echo'<link rel="stylesheet" href="css/blasspflaume.css" type="text/css" title="blasspflaume" >';
      break;
      case hellblaugruen:
         echo'<link rel="stylesheet" href="css/hellblaugruen.css" type="text/css" title="hellblaugruen" >';
      break;
      case mattgruen:
         echo'<link rel="stylesheet" href="css/mattgruen.css" type="text/css" title="mattgruen" >';
      break;
      case mattrosa:
         echo'<link rel="stylesheet" href="css/mattrosa.css" type="text/css" title="mattrosa" >';
      break;
      case oliv:
         echo'<link rel="stylesheet" href="css/oliv.css" type="text/css" title="oliv" >';
      break;
   }
}
?>
<form method="post" action="cookie.php">
	<select name=setcolor size=1>
		<option value=>Bitte w&auml;hlen</option>
		<option value="blassgruen">Bla&szlig;gr&uuml;n</option>
		<option value="blasspflaume">Bla&szlig;pflaume</option>
		<option value="hellblaugruen">Hellblaugruen</option>
		<option value="mattgruen">Mattgr&uuml;n</option>
		<option value="mattrosa">Mattrosa</option>
		<option value="oliv">Oliv</option>
  </select>
<input type="submit" value="Hintergrundauswahl">
</form>
</body>
</html>
cookie.php

Code: Alles auswählen

<?php
if (isset($_POST['setcolor']))
{
	$color = $_POST['setcolor'];
	setcookie("color", $_POST['setcolor'], time()+31536000); // Setzt Cookie für ein Jahr = 31536000 sec
	header("Location: index.php");
	exit;
}
?>
Die Cookie rufe ich auf damit die seite gleich neu geladen wird und die auswahl angezeigt, dann braucht man kein refresh.

Verfasst: So 30. Apr 2006, 12:29
von Uwe
Hallo HerrB
HerrB hat geschrieben:http://de.selfhtml.org
Selfhtml gehört zu meinen Standard-Nachschlagewerken. Stefan Münz schreibt dort, dass es keine Möglichkeit in HTML gibt festzustellen, ob Javascript an oder aus ist ...

Naja, da kümmere ich mich drum, wenn etwas mehr Zeit ist. Hätte ja sein können, das es schon was fertiges gibt.

Viele Grüsse vom Bodensee, Uwe

Verfasst: So 30. Apr 2006, 15:57
von HerrB
Ähm...

PHP (=serverseitig) kann nicht mit 100% Sicherheit feststellen, ob JavaScript (=clientseitig) verfügbar ist.

Die "Prüfung", ob der Browser JS unterstützt bzw. aktiviert ist, übernimmt der Browser selbst (d.h. es gibt da schon was Fertiges...).

Definiere also einen JS-Bereich, der die Dropdown-Box ausgibt und darunter einen noscript-Bereich, wie Du es vorgeschlagen hast.

Den JS-Bereich erzeugst Du mit PHP:

Code: Alles auswählen

<script type="text/javascript">
<?php 

// alle activen Sprachen ermitteln 
#SELECT idlang, online FROM ".$cfg["tab"]["art_lang"]." WHERE idart=$idart ORDER BY idlang ASC (neu) 
#SELECT idlang, name FROM cms_lang WHERE active=1 ORDER BY idlang 
$query = "SELECT idlang, name FROM cms_lang WHERE active=1 ORDER BY idlang"; 
// execute query 
$db->query($query); 

// Listbox erstellen, javascript wird aktiv wenn Wert sich aendert 
echo "document.writeln('<select style=\"width:145px; border: 0px;\" name=\"changeactivelang\" onchange=\"top.location.href = this.value\">');";

while ( $db->next_record() ) { 
   // idlang, name ermitteln 
   $c_idlang = $db->f("idlang"); 
   $c_name = $db->f("name"); 

   // aktuelle Sprache wird selected 
   if ($c_idlang == $lang) { 
      $lang_sel = "selected"; 
   } else { 
      $lang_sel = ""; 
   } 

   // Link fuer das wechseln der Sprache wird in value geschrieben 
   echo "document.writeln('<option value=\"front_content.php?client=".$client."&changelang=".$c_idlang."&parent=".$parent."&subid=".$subid."&idcat=".$idcat." ".$lang_sel."\">".$c_name."</option>');"; 
} 
   echo "document.writeln('</select>')"; 
?> 
</script>
<noscript> 
<?php 
//Konfiguration... 
//Diese Zeilen konfigurieren das Modul... 
$sprache["1"] = "deutsch"; 
$sprache["2"] = "english"; 


//AB HIER NICHTS MEHR ÄNDERN... 
$mydb = new DB_Contenido; 

$mydb ->query ("SELECT idlang, online FROM ".$cfg["tab"]["art_lang"]." WHERE idart=$idart ORDER BY idlang ASC"); 

while ($mydb -> next_record()) 
{ 
   while(list($lang_id,$sprache_pfad) = each($sprache)) 
   { 
      if (($lang != ($mydb->f("idlang"))) and (($mydb->f("idlang")) == $lang_id) and (($mydb->f("online")) == 1)) 
      { 
         echo "<a href=".$sess->url("front_content.php?client=$client&changelang=".($mydb->f("idlang"))."&idart=$idart"); 
         echo ">".$sprache_pfad."</a>&nbsp;"; 
      } 
   } 
   reset($sprache); 
} 
?> 
</noscript>
Kann sein, dass Du noch ein wenig mit den " und ' bzw. \" spielen musst...

Gruß
HerrB