[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вопрос по GET
Crash2007
(на сайте сделал многоязычность)
при нажатии на "ru", в адресную сроку передается "?lang=ru", но если там уже есть другие элементы, они стираются и добавляется "?lang=ru".
Как сделать чтобы просто в добавить в конец "&lang=ru" ??
я сделал так:
<a href="
<?
if(empty(
$_GET)) {echo "?lang=ua";}
else
{
if(
$_GET['lang'] == 'ru')
echo "
?lang=ua";
else echo "
&lang=ua";
}
?>"
>ua</a>

как в этой строке "else echo _*здесь*_ "&lang=ua";" прицепить то, что уже есть?



Спустя 31 минута, 28 секунд (19.01.2010 - 15:14) Gradus написал(а):
Серверные переменные типо
$_SERVER['REQUEST_URI']

p.s. поправил пост )

Спустя 1 минута, 41 секунда (19.01.2010 - 15:16) Gabriel написал(а):
Crash2007
а взять запихнуть текущий урл в ссылку и добавить к нему &amp;lang=ua пробовали?

Спустя 3 минуты, 47 секунд (19.01.2010 - 15:20) Crash2007 написал(а):
Gradus
если у меня ссылка выглядит: index.php?add
то преврящается: index.php?&lang=ua

Спустя 3 минуты, 33 секунды (19.01.2010 - 15:23) Gradus написал(а):
if($_GET['lang'] == 'ru')
echo "?lang=ua";
else echo $_SERVER['REQUEST_URI']."&lang=ua";

Спустя 4 минуты, 50 секунд (19.01.2010 - 15:28) Crash2007 написал(а):
Gradus
оО спасибо!
но немножко корявенько..
нажимаю несколько раз на "ua", "ru" --получается:
/index.php?add&lang=ua&lang=ru&lang=ua&lang=ru
как это исправить?..

Спустя 2 минуты, 52 секунды (19.01.2010 - 15:31) arlamar написал(а):
Gradus
если сделать как ты сказал то получится примерно так: /news?lang=ru&lang=ua

не буду сильно мудрить) вот такой вариант:
if($_GET['lang'] == 'ru')
echo str_replace('lang=ru', 'lang=ua', $_SERVER['REQUEST_URI']);
else echo str_replace('lang=ua', 'lang=ru', $_SERVER['REQUEST_URI']);

Спустя 8 минут, 37 секунд (19.01.2010 - 15:39) Crash2007 написал(а):
arlamar
теперь если в адр.стоке сущечтвует только "lang", твой пример работает хорошо.
но если там есть ещё чтото, то не работает...

Спустя 2 минуты, 4 секунды (19.01.2010 - 15:42) arlamar написал(а):
быть этого не может.
покажи адресную строку в которой не сработало, попробуем разобраться

Спустя 4 минуты, 42 секунды (19.01.2010 - 15:46) Crash2007 написал(а):
если она выглядит так: http://xxx/xxx/index.php?add
то если нажимаю "ru " или "ua" ничего не происходит
а если так: http://xxx/xxx/index.php , всё работает!)

вот как всё выглядит:
<a href="
<?
if(empty(
$_GET)) {echo "?lang=ua";}
else
{
if(
$_GET['lang'] == 'ua')
echo str_replace('lang=ua', 'lang=ru',
$_SERVER['REQUEST_URI']);
else echo str_replace('lang=ru', 'lang=ua',
$_SERVER['REQUEST_URI']);
}
?>"
>ua</a>
<
a href="
<?
if(empty(
$_GET)) {echo "?lang=ru";}
else
{
if(
$_GET['lang'] == 'ru')
echo str_replace('lang=ru', 'lang=ua',
$_SERVER['REQUEST_URI']);
else echo str_replace('lang=ua', 'lang=ru',
$_SERVER['REQUEST_URI']);
}
?>"
>ru</a>

Спустя 2 минуты, 34 секунды (19.01.2010 - 15:49) arlamar написал(а):
так... давай ка весь кусок кода подстановки)) ща будем смотреть)

Спустя 2 минуты (19.01.2010 - 15:51) Crash2007 написал(а):
ещё и это: )
function language()
{
if(isset($_REQUEST['lang']))
{
session_unregister('lang');
if($_REQUEST['lang'] == 'ua') {include "languages/ua.php";}
elseif($_REQUEST['lang'] == 'ru') {include "languages/ru.php";}
$_SESSION['lang'] = $_REQUEST['lang'];
}
if(isset($_SESSION['lang']))
{
if($_SESSION['lang'] == 'ua') {include "languages/ua.php";}
elseif($_SESSION['lang'] == 'ru') {include "languages/ru.php";}
}

if(!isset($_REQUEST['lang'])) {include "languages/ru.php";}
}

Спустя 19 минут, 39 секунд (19.01.2010 - 16:10) arlamar написал(а):
там не надо 2 ссылки... раз у тебя по умолчанию русский язык значит ссылку сразу делаем на укр. язык.
вроде так:
<a href="
<?
if(empty(
$_GET)) {echo "?lang=ua"; $lng="ua"}
else
{
if(isset(
$_GET['lang']) {
if (
$_GET['lang'] == 'ru') {
echo str_replace('lang=ru', 'lang=ua',
$_SERVER['REQUEST_URI']);
$lng = "ua";
} else {
else echo str_replace('lang=ua', 'lang=ru',
$_SERVER['REQUEST_URI']);
$lng = "ru";
}
} else {
echo
$_SERVER['REQUEST_URI']."&lang=ru";
$lng = "ru";
}
}
?>"
><? echo $lng; ?></a>

должно работать но не проверял)

Спустя 9 минут, 19 секунд (19.01.2010 - 16:20) Crash2007 написал(а):
если ссылка выглядит так: http://xxx/xxx/index.php?add
стаёт: http://xxx/xxx/index.php?lang=ru

Спустя 3 минуты, 2 секунды (19.01.2010 - 16:23) sergeiss написал(а):
Тут лучше "забыть" про $_SERVER['REQUEST_URI'], и просто пройти по массиву $_GET.

Проверяем наличие значения (чтобы избежать дубля)
if( in_array(.... ) ) ;// не надо добавлять
// иначе вставляем в массив $_GET новое значение

$_GET[...]=...

Затем, когда все параметры ГЕТа готовы, формируем строку параметров
$new_get=implode( '&', $_GET);

И окончательно формируем строку для следующего вызова:
$_SERVER['PHP_SELF']. '?' . $new_get;

Всё это можно сделать более компактно, чем я написал. Я тут специально разнес в разные строки, чтобы понятнее была моя мысль.

Спустя 3 минуты, 30 секунд (19.01.2010 - 16:26) Crash2007 написал(а):
sergeiss
если с этого кода сделаешь как надо, буду очень благодарен..=)
<a href="
<?
if(empty(
$_GET)) {echo "?lang=ua";}
else
{
if(
$_GET['lang'] == 'ua')
echo str_replace('lang=ua', 'lang=ru',
$_SERVER['REQUEST_URI']);
else echo str_replace('lang=ru', 'lang=ua',
$_SERVER['REQUEST_URI']);
}
?>"
>ua</a>
<
a href="
<?
if(empty(
$_GET)) {echo "?lang=ru";}
else
{
if(
$_GET['lang'] == 'ru')
echo str_replace('lang=ru', 'lang=ua',
$_SERVER['REQUEST_URI']);
else echo str_replace('lang=ua', 'lang=ru',
$_SERVER['REQUEST_URI']);
}
?>"
>ru</a>

Спустя 4 минуты (19.01.2010 - 16:30) sergeiss написал(а):
А я чего? smile.gif "Мавр сделал своё дело, мавр может уходить".

Я расписал алгоритм, как я его вижу. А ты уж сам подумай... Там, в моем предыдущем ответе в этой теме, написана едва ли не половина кода. А остальное расписано словами.

Спустя 41 секунда (19.01.2010 - 16:31) arlamar написал(а):
в моём предыдущем посте была ошибка) теперь вроде всё должно работать.
Crash2007
пробовал этот код?)

Спустя 1 минута, 22 секунды (19.01.2010 - 16:32) Crash2007 написал(а):
arlamar
а если ссылка выглядит так: http://xxx/xxx/index.php ? add & lang =ru
тоесть я сам дописал "?add" то работает...

(а ошибку я исправил(если ты про лишний else))

sergeiss
ок.спс)

Спустя 12 минут, 1 секунда (19.01.2010 - 16:44) arlamar написал(а):
всё проверил код) вот этот точно работает))
<a href="
<?php
if (empty(
$_GET)) {
echo '?lang=ua';

$lng='ua';
} else {
if(isset(
$_GET['lang'])) {
if (
$_GET['lang'] == 'ru') {
echo str_replace('lang=ru', 'lang=ua',
$_SERVER['REQUEST_URI']);
$lng = "ua";
} else {
echo str_replace('lang=ua', 'lang=ru',
$_SERVER['REQUEST_URI']);
$lng = "ru";
}
} else {
echo
$_SERVER['REQUEST_URI']."&lang=ru";
$lng = "ru";
}
}
?>"
><?php echo $lng; ?></a>

Спустя 2 минуты, 32 секунды (19.01.2010 - 16:47) sergeiss написал(а):
arlamar - а если будет не 2 языка, а больше? Код сильно "распухнет". То, что я предложил - более универсально, более компактно и более наглядно.

Спустя 2 минуты, 5 секунд (19.01.2010 - 16:49) arlamar написал(а):
sergeiss, ну это понятно) я сам бы так не делал)) просто человек попросил решить проблему и дал свой код, который надо было подправить) и делать по уму у меня нет времени)) пытаюсь одновременно работать

Спустя 2 минуты, 31 секунда (19.01.2010 - 16:52) Crash2007 написал(а):
оО спасибо!! arlamar
сейчас всё работает!! =)

только почемуто сейчас если делаю "session_unregister('lang');" когда язык "ua", то дефолтный не ставится "ru", а только после перезагрузки страницы!

Спустя 3 минуты, 25 секунд (19.01.2010 - 16:55) arlamar написал(а):
ты про эту функцию?
function language()
{
if(isset($_REQUEST['lang']))
{
session_unregister('lang');
if($_REQUEST['lang'] == 'ua') {include "languages/ua.php";}
elseif($_REQUEST['lang'] == 'ru') {include "languages/ru.php";}
$_SESSION['lang'] = $_REQUEST['lang'];
}
if(isset($_SESSION['lang']))
{
if($_SESSION['lang'] == 'ua') {include "languages/ua.php";}
elseif($_SESSION['lang'] == 'ru') {include "languages/ru.php";}
}

if(!isset($_REQUEST['lang'])) {include "languages/ru.php";}
}

Спустя 2 минуты, 35 секунд (19.01.2010 - 16:58) Crash2007 написал(а):
у меня есть ещё это:
<a href="?logout">unregister_session</a>
<?
if(isset($_REQUEST['logout'])) {session_unregister('lang');}
?>


Спустя 6 минут, 45 секунд (19.01.2010 - 17:04) arlamar написал(а):
попробуй такой вариант функции language
function language()
{
$include_file = "ru.php";
$_SESSION['lang'] = 'ru';
if(isset($_REQUEST['lang']))
{
if($_REQUEST['lang'] == 'ua') {
$include_file = 'ua.php';
$_SESSION['lang'] = 'ua';
}
//Не понятно для чего тут сессии... ты где то ещё испольщуешь $_SESSION['lang']?
}
include "languages/$include_file";
}

Спустя 3 минуты (19.01.2010 - 17:07) Crash2007 написал(а):
сеанс у меня сохранялся и для других страниц..
с твоим примером не работает..(

Спустя 3 минуты, 40 секунд (19.01.2010 - 17:11) arlamar написал(а):
что именно не работает с моим примером? по тому, что у меня всё работает

Спустя 1 минута, 46 секунд (19.01.2010 - 17:13) Crash2007 написал(а):
после перезагрузки страницы язык ставится "ru"

Спустя 10 минут, 13 секунд (19.01.2010 - 17:23) arlamar написал(а):
function language()
{
if(isset($_REQUEST['lang']))
{
switch ($_REQUEST['lang']) {
case 'ua':
$_SESSION['lang'] = 'ua';
break;
case 'ru':
$_SESSION['lang'] = 'ru';
break;
}
}

if (isset($_SESSION['lang'])) {
include "languages/".$_SESSION['lang'].".php";
} else {
include "languages/ru.php";
}
}


пробуй)

Спустя 28 минут, 24 секунды (19.01.2010 - 17:51) Crash2007 написал(а):
функция работает..

есть проблема в
if(empty($_GET)) {echo "?lang=ua"; $lng="ua";}

ведь сеанс когда "ua" оно всёравно выводит ссылку на укр.язык ("ua")...

Спустя 9 минут, 2 секунды (19.01.2010 - 18:00) arlamar написал(а):
if (empty($_GET)) {
if (isset($_SESSION['lang']) && $_SESSION['lang']=='ru') {
echo '?lang=ua';
$lng='ua';
} else {
echo '?lang=ru';
$lng='ru';
}
}


исправил пост

Спустя 5 минут, 41 секунда (19.01.2010 - 18:06) Crash2007 написал(а):
когда нажимаю "ru", ссылка исчезает, и только после перезагрузки страницы появляется "ua"..

Спустя 5 минут, 2 секунды (19.01.2010 - 18:11) arlamar написал(а):
ну не знаю уже... вот это у меня отлично переключает.
function language()
{
if(isset($_REQUEST['lang']))
{
switch ($_REQUEST['lang']) {
case 'ua':
$_SESSION['lang'] = 'ua';
break;
case 'ru':
$_SESSION['lang'] = 'ru';
break;
}
}

if (isset($_SESSION['lang'])) {
include "languages/".$_SESSION['lang'].".php";
} else {
include "languages/ru.php";
}
}


?>
<a href="
<?php
if (empty(
$_GET)) {
if (isset(
$_SESSION['lang']) && $_SESSION['lang']=='ru') {
echo '?lang=ua';

$lng='ua';
} else {
echo '?lang=ru';

$lng='ru';
}
} else {
if(isset(
$_GET['lang'])) {
if (
$_GET['lang'] == 'ru') {
echo str_replace('lang=ru', 'lang=ua',
$_SERVER['REQUEST_URI']);
$lng = "ua";
} else {
echo str_replace('lang=ua', 'lang=ru',
$_SERVER['REQUEST_URI']);
$lng = "ru";
}
} else {
echo
$_SERVER['REQUEST_URI']."&lang=ru";
$lng = "ru";
}
}
?>"
><?php echo $lng; ?></a>


вот тут можешь посмотреть, всё работает

Спустя 6 минут, 33 секунды (19.01.2010 - 18:18) Crash2007 написал(а):
ну всё, работает!!=))
спасибо тебе большое!! biggrin.gif

Спустя 3 минуты, 13 секунд (19.01.2010 - 18:21) arlamar написал(а):
Цитата
ну всё, работает!!=))

ура! smile.gif
Цитата
спасибо тебе большое!!

да пожалуйста)

Спустя 2 часа, 1 минута, 2 секунды (19.01.2010 - 20:22) Crash2007 написал(а):
arlamar
скажи как получить доступ к переменной $lng, из функции..

Спустя 4 минуты, 48 секунд (19.01.2010 - 20:27) arlamar написал(а):
из какой функции, для чего?
функция в этом же файле?

Спустя 4 минуты, 42 секунды (19.01.2010 - 20:31) Crash2007 написал(а):
этот код я поместил в функцию:
if (empty($_GET)) {
if (isset($_SESSION['lang']) && $_SESSION['lang']=='ru') {
echo '?lang=ua';
$lng='ua';
} else {
echo '?lang=ru';
$lng='ru';
}
}
else {
if(isset($_GET['lang'])) {
if ($_GET['lang'] == 'ru') {
echo str_replace('lang=ru', 'lang=ua', $_SERVER['REQUEST_URI']);
$lng = "ua";
} else {
echo str_replace('lang=ua', 'lang=ru', $_SERVER['REQUEST_URI']);
$lng = "ru";
}
}
else {
echo $_SERVER['REQUEST_URI']."&lang=ru";
$lng = "ru";
}
}

в другом файле.
и теперь:
<?php echo $lng; ?>
не работает..

Спустя 2 минуты, 29 секунд (19.01.2010 - 20:34) arlamar написал(а):
допустим функция set_lng()

тогда в конце функции верни значение $lng
вот так: return $lng;

а вместо <?php echo $lng; ?>
вот это <?php echo set_lng(); ?>

Спустя 5 минут, 21 секунда (19.01.2010 - 20:39) Crash2007 написал(а):
и выводит "?lang=ruru" почемуто..))

Спустя 2 минуты, 21 секунда (19.01.2010 - 20:42) arlamar написал(а):
блин ну я не могу так... я же не вижу весь код

Спустя 5 минут, 3 секунды (19.01.2010 - 20:47) arlamar написал(а):
кароч верни как было и $lng объяви глобальной...
в начале функции. вот так: global $lng;

Спустя 3 минуты, 50 секунд (19.01.2010 - 20:50) Crash2007 написал(а):
оо..вот и я об этом! спс!)


_____________
Рисую на PHP :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.