Консультация № 125920
04.03.2008, 14:29
0.00 руб.
0 3 3
Здравствуйте, уважаемые участники форума! Я хотел сделать многоязыковый сайт но пока не знаю полностью суть дела "значение=параметр" после index.php.
Как можно сделать так чтобы при нажатии на определенную ссылку приведенного ниже кода, загрузилась соответствующая страница, т.е. например при нажатии на

<a href="http://mysite.com/index.php?lang=en"><img src="us1.gif" width="20" height="12" border="0"></a>
нужно перейти на страницу indexen.php и так далее.

Заранее благодарен!!!


Приложение:
<td width="100%" height="45" align="center" valign="middle">
<a href="http://mysite.com/index.php?lang=en"><img src="us.gif" width="20" height="12" border="0"></a><a href="http://mysite.com/index.php?lang=de"><img src="germ.gif" width="18" height="12" border="0"></a><a href="http://mysite.com/index.php?lang=ru"><img src="ru.gif" width="18" height="12" border="0"></a><a href="http://mysite.com/index.php?lang=ua"><img src="ukr.gif" width="18" height="12" border="0"></a> </td>

Обсуждение

Неизвестный
04.03.2008, 14:39
общий
это ответ
Здравствуйте, Sherland!
То, что Вы хотите сделать, выполняется с помощью модуля Apache mod_rewrite (если я, конечно, правильно понял, что Вы хотите).
Поместите в корневую директорию сайта файл .htaccess следующего содержания:

RewriteEngine On
RewriteRule index.php?lang=(en|ru|it|de) index$1.php

Поясню смысл сего... Поставьте в скобки любое обозначение языка - en, ru, it, de(соответственно, английский, русский, итальянский, немецкий), и открываться будут страницы indexen.php, indexru.php, indexit.php, indexde.php. Вы можете поставить в скобки любое обозначение, главное, чтобы был соответствующий файл в каталоге.
С уважением, Товарищ Бородин
Неизвестный
04.03.2008, 15:06
общий
это ответ
Здравствуйте, Sherland!

1. Суть передачи параметров через URL (т.н. GET-строка) такова:
После знака вопроса передаются значения переменных в виде ИМЯ=ЗНАЧЕНИЕ&...
Переменные автоматически записываются в глобальный массив $_GET, откуда мы их и будем использовать.

2. Если Вы планируете отдельные страницы для каждого языка, то можно использовать следующий вариант:

<?
switch ($_GET["lang"]) {
case "en": $new_path = "indexen.php"; break;
case "ru": $new_path = "indexru.php"; break;
case "ua": $new_path = "indexua.php"; break;
default: $new_path = "indexru.php";
}
header("Location: http://mysite.com/".$new_path); // без передачи параметров скрипту
header("Location: http://mysite.com/".$new_path."?".$_SERVER["QUERY_STRING"]); // с передачей параметров
?>
Данный скрипт делает перенаправление на вычисленный адрес. С помощью глобальной переменной $_SERVER["QUERY_STRING"] мы передаем GET-строку с полученными скриптом параметрами (в нашем примере это lang=en, но могут также быть данные о пользователе или еще что-нибудь).

ВНИМАНИЕ! Функция header должна быть вызвана ДО любого вывода на экран (будь то текст страницы или ошибка/предупреждение интерпретатора php). Поэтому она должна быть как можно раньше в теле скрипта. Также проследите, чтоб перед открывающей скобкой <? не было пробелов или тэгов HTML - иначе браузер может воспринять это как начало вывода на экран. Возможность избежать предварительного вывода на экран - использование буферизации (функции ob_start() и ob_end_flush() в php4+).

3. Еще один способ - просто включать тело выбранного скрипта в Ваш index.php:

include_once($new_path); // если не надо передавать параметры в скрипт
include_once("http://mysite.com/".$new_path."?".$_SERVER["QUERY_STRING"]); // с передачей параметров

Однако в таком случае могут возникнуть проблемы с передачей параметров в данный скрипт (для этого должна быть включена опция php allow_url_fopen).

Наверное запутал Вас разными способами... ИМХО наиболее простой способ - это заранее использовать ссылку на скрипт, подставляя ее в тэг <A>, ведь перечень адресов наверняка заранее известен. Использовать передачу параметра языка имеет смысл, если Вы используете шаблон страницы, заполняемый различными строками, в зависимости от выбранного языка. Например, так сделан форум phpBB (все строки форума вынесены в отдельную папку Laguage и доступны различные их переводы)

PS. Приведенный выше Товарищем Бородиным способ работает с модулем mod_rewrite веб-сервера Apache. Если у Вас надо анализировать только передачу параметра в index.php, то решение удобно. Однако тогда следите, чтоб параметр lang всегда шел сразу после вопросительного знака, иначе правило замены не сработает
Неизвестный
04.03.2008, 16:07
общий
это ответ
Здравствуйте, Sherland!

Единственное изменение - прийдётся рисунки переименовать под стать языкам.


Приложение:
<?php$langs=array("en","de","ru","ua");foreach ($langs as $l)echo "<a href=‘http://mysite.com/index".$l.".php‘><img src=‘".$l.".gif‘ width=‘20‘ height=‘12‘ border=‘0‘></a>";?>
Форма ответа