Javascript und Sprachauswahl

Gesperrt
Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Javascript und Sprachauswahl

Beitrag von Uwe » Fr 28. Apr 2006, 18:53

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Sa 29. Apr 2006, 00:13

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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

Beitrag von php0815 » Sa 29. Apr 2006, 07:45

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.
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » So 30. Apr 2006, 12:29

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 30. Apr 2006, 15:57

Ä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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Gesperrt