Я пытаюсь реализовать простую многоязычную форму в HTML. В форме есть кнопки, которые открывают таблицы базы данных в div, а также есть выбор для выбора языка.
Кнопки похожи на:
<button type='submit' name='table' value='x'>
Выбор как:
<select name='lang' onchange='changeLang()'>
...
function changeLang() {
document.getElementById('form1').submit();
}
Когда я нажимаю кнопку, она показывает таблицу (и параметр, такой как ‘table = x’, отображается в URL). Но когда я меняю язык, отображается только параметр «lang = y», параметр «table» исчезает.
Я попробовал решения Вот, Вот а также Вот, но это не работает Скрытые параметры добавляют к существующей кнопке, и я получаю два «табличных» параметра в URL. Как я могу сохранить все параметры в URL, не дублируя их?
РЕДАКТИРОВАТЬ: Я пытался сделать что-то в этой строке:
<?php session_start();
$erroConn = include(".../dbfile.php");
if (isset($_GET['lang'])) { // language
$lang = $_GET['lang'];
leDic($lang);
} else {
$lang = NULL;
}
if (isset($_GET['table'])) { // table
$table = $_GET['table'];
} else {
$table = NULL;
}
if (isset($_GET['people'])) { // people
$people = $_GET['people'];
} else {
$people = NULL;
}
?>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<title>Example</title>
<script type='text/javascript'>
function changeLang() {
document.getElementById('form1').submit();
}
</script>
</head>
<body>
<form id="form1" name="form1" method="get" action="">
<h1>titulo</h1>
<?php
if (is_null($table)) {
echo "<button type='submit' name='table' value='0'>tabelas</button>"; # only shows the button if not yet pressed
} else {
echo "<input type='hidden' name='table' value='$table' />"; # if pressed keep the variable (but is doubling it?)
$people = NULL;
}
if (is_null($people)) {
echo "<button type='submit' name='people' value='0'>people</button><BR>";
} else {
echo "<input type='hidden' name='people' value='$people' />"; # if pressed keep the variable (but is doubling it?)
$table = NULL;
}
echo "<input type='text' name='msg' />";
echo "<input type='submit' value='ok' />";
$dir1 = glob('./coisas_txt*'); # all languages available as simple txt (key=value)
echo "<div id='langs' class='langs'>"; # class to make the language bar float
echo "<select name='lang' onchange='changeLang()'>";
foreach ($dir1 as $fname) {
$sigla = mb_substr($fname,-2,NULL,'UTF-8');
if ($sigla == $lang) {
echo "<option value='$sigla' selected>$sigla</option>";
} else {
echo "<option value='$sigla'>$sigla</option>";
}
}
?>
</select>
</div>
</div>
<div id='table'> <!-- where the table goes -->
<?php
if ($table !== NULL) {
}
?>
</div>
</form>
</body>
</html>
Скрытые поля должны работать.
Для каждой таблицы есть элемент формы со скрытым вводом для таблиц, уникальный идентификатор и выбор для языков.
Например:
<form id="form1" name="form1">
<input type="hidden" id="table_1" name="table_1" value="x" />
<select id="lang" name='lang' onchange='changeLang()'>
</form>
<form id="form2" name="form2">
<input type="hidden" id="table_2" name="table_2" value="x" />
<select id="lang" name='lang' onchange='changeLang()'>
</form>
И пусть функция changeLang отправит форму, в которой она находится.
Родные элементы DOM, которые являются входными данными, также имеют атрибут формы, указывающий на форму, к которой они принадлежат, поэтому это должно работать. Просто найдите родительский элемент ввода, который вызывает функцию JavaScript в вашем JavaScript. Здесь можно использовать и ближайший. Играть с этим.
function changeLang() {
var form = ______.form;
form.submit();
}
Затем интерпретируйте переменные $ _GET [‘table’] AND $ _GET [‘lang’], используя PHP, чтобы решить, что показывать.
Вот так:
<?php
//switch based on language...
switch($_GET['lang']){
case 'lang1':
//display table_1 if we should
if($_GET['table_1']){
?>
<!-- table_1 display in lang1 HTML here. -->
<?php
}
//display table_2 if we should
if($_GET['table_2']){
?>
<!-- table_2 display in lang1 HTML here. -->
<?php
}
break;
case 'lang2':
//display table_1 if we should
if($_GET['table_1']){
?>
<!-- table_1 display in lang2 HTML here. -->
<?php
}
//display table_2 if we should
if($_GET['table_2']){
?>
<!-- table_2 display in lang2 HTML here. -->
<?php
}
break;
default
//display table_1 if we should
if($_GET['table_1']){
?>
<!-- table_1 display in default lang HTML here. -->
<?php
}
//display table_2 if we should
if($_GET['table_2']){
?>
<!-- table_2 display in default lang HTML here. -->
<?php
}
break;
}
?>
Что-то вроде того.
Надеюсь, поможет!
Других решений пока нет …