Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Парсинг или разбитие строки
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Парсинг или разбитие строки

Страниц (1): [1]
 

1. SergeantPEPPER - 04 Марта, 2008 - 18:34:37 - перейти к сообщению
Здравствуйте, нужно сделать разбивку строки с помощью Javascript (или же полностью поменять метод решения моей задачи???).

Задача такова: у меня сайт имеет два языковых режима: русский и английский, все компоненты страниц поэтому я таскаю из базы данных в зависимости от выбранного режима. Текущий выбранный язык хранится в сессии, однако вот смена языка происходит через ссылку методом GET.
Для того, чтобы при выборе языка юзер отсался именно на текущей странице (включая все GET параметры), я обрабатываю событие OnClick на ссылке смены языка Javascript функцией

CODE (text):
скопировать код в буфер обмена
  1. function GetCurAddress ()
  2. {
  3.         return location.href;
  4. }


Проблема в том, что при каждом следующем клике на ссылке смены языка будет прибавлять к GET строке &lang=???, так что в конечном итоге получается примерно такая вещь:

CODE (text):
скопировать код в буфер обмена
  1. http://localhost/zamzam/index.php?content=news&lang=en&lang=ru&lang=en&lang=ru&lang=en

Как бы это аккуратно обойти или исправить?
2. EuGen - 04 Марта, 2008 - 19:04:09 - перейти к сообщению
Вы можете сделать перенаправление пользователя. К примеру, lang.php - Ваша текущая страница (со ссылкой на смену языка), а на странице index.php у Вас реализована сама смена.
Делаете такую ссылку:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $return_str=(getenv('QUERY_STRING'))?urlencode(getenv('SCRIPT_NAME')."?".getenv('QUERY_STRING')):("lang.php");
  4. //эта ссылка располагается на lang.php
  5. //$lang - язык, на который нужно сменить текущий
  6. $url="http://localhost/zamzam/index.php?lang=".$lang."&callback=".$return_str;
  7. ?>
  8.  

В $url будет ссылка с параметром callback. Этот параметр Вам нужно использовать на странице смены языка таким образом:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //... тут Ваша обработка смены языка - пришедшего из lang.php параметра lang
  4. $callback=$_GET['callback'];
  5. header("Location: $callback");//этим Вы перенаправите клиента на страницу lang.php со всеми ее GET-параметрами, с которыми был сделан запрос на index.php
  6. ?>
  7.  

Это первое, что приходит на ум, и, скорее всего, не самое оптимальное.
3. SergeantPEPPER - 06 Марта, 2008 - 19:01:07 - перейти к сообщению
Отдельный скрипт с Редиректом в принципе, конечно, - вариант. Однако хотелось бы как-нибудь по-красивее решить эту проблемку...

Кстати, у меня сайт работает через одну страницу index.php (то есть, если я хочу попасть на страницу новостей, я захожу на index.php?content=news, где потом следует include(news.php) ).

У меня в задумке было вот что:

На index.php есть две ссылки на смену языка. Каждая из них ссылается на страницу index.php со всеми текущими параметрами и подстыковывает к ним &lang=???

Чтобы не получалось бесконечной цепочки этих lang-ов, при непрерывных повторных сменах языка через ссылки я бы поставил на событие onclick этих ссылок какой-нибудь обработчик. Он бы смотрел бы текущую строку GET параметров, и в случае, если она уже содержит параметр lang, удалял бы его.

Удалял - это я имею ввиду переходил бы по данному адресу не учитывая lang, который уже имелся в наличии.

Как осуществить такой анализ строки в Javascript я не знаю. Подскажите, если не сложно или дайте ссылку на какую-нибудь литературу, а то я уже семь учебников прошарил - ничо не нашел.
4. valenok - 06 Марта, 2008 - 20:25:35 - перейти к сообщению
Парсинг "GET" параметров я писал когда то.
Только потерял.. Напишу потом ещё раз.
А пока можно сделать просто

PHP:
скопировать код в буфер обмена
  1. onclick = "document.location='<?PHP
  2. echo preg_replace("/lang=(ru|en)?&?/i","",$_SERVER["REQUEST_URI"]);
  3. ?>&lang=X' "


-------------------------------- ------------

PHP:
скопировать код в буфер обмена
  1. var url = "http://host/index.php?id=7&page=2&lang=ch#TheEnd";
  2. var name_href = ""; // обязательная строка
  3. var GET = Array(); // Эта тоже пригодится
  4.  
  5. function parseGET(str){  
  6.  
  7.         str = str.split('?');
  8.         str = str[1];
  9.  
  10.         if(str.indexOf('#')!=-1)    
  11.         {    
  12.                 name_href = str.substr(str.indexOf('#')+1);
  13.                 str = str.substr(0,str.indexOf('#'));
  14.         }
  15.  
  16.         params = str.split('&');
  17.         for (i=0; i<params.length; i++)
  18.         {
  19.                 var keyval = params[i].split('=');
  20.                 GET[keyval[0]]=keyval[1];
  21.         }
  22.      
  23. return (GET);
  24. };
  25.  
  26. GET = parseGET(url);
  27. alert(GET['page']);
5. SergeantPEPPER - 13 Марта, 2008 - 18:44:16 - перейти к сообщению
Вот за последний js скрипт БОЛЬШОЕ спасибо. ОЧЕНЬ помог, и главное - это сильно развязывает руки Улыбка

 

Powered by ExBB FM 1.0 RC1