на моем веб-сайте у пользователя есть несколько вариантов, таких как язык, дата и регион. когда пользователь нажимает на кого-либо из них все в порядке, веб-сайт адаптируется к конкретным вариантам, но когда они переходят на другую страницу, они теряют все свои возможности, было бы неплохо, если бы я нашел способ удержать их на весь их визит или, возможно, 24 часа.
Например: bob выходит на мой сайт, в регионе настройки, он щелкает Великобритании, и в результате сайт адаптируется и показывает ему британский флаг в результате. Однако, когда он идет на следующую страницу, он теряет флаг и свой регион, и ему приходится снова выбирать настройку своего региона.
Это то, что я хочу исправить. Я отправлю весь код на случай, если это может помочь:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Loughborough University | Students Union</title> <script type="text/javascript" src="scripts/changesheets.js"></script> <?php include("scripts/lang_change.php"); ?> <?php include("scripts/factoid_randomise.php"); ?> <?php include("scripts/greeting.php"); ?> <?php include("scripts/menu_change.php"); ?> <?php include("scripts/lang_select.php"); ?> <?php include("scripts/geo_loc_change.php"); ?> <link href="css/style.css" rel="stylesheet" type="text/css" media="screen" /> <link href="css/grey_white.css" rel="stylesheet" type="text/css" media="screen" /> <link href="css/orange_black.css" rel="stylesheet" type="text/css" media="screen" /> <link href="css/offwhite_blue.css" rel="stylesheet" type="text/css" media="screen" /> <link href="css/style.css" rel="stylesheet" type="text/css" media="screen" /> <script type="text/javascript"> //Specify affected tags. Add or remove from list: var tgs = new Array( 'div','td','tr','li','p'); //Specify spectrum of different font sizes: var szs = new Array( 'xx-small','x-small','small','medium','large','x-large','xx-large' ); var startSz = 2; function ts( trgt,inc ) { if (!document.getElementById) return var d = document,cEl = null,sz = startSz,i,j,cTags; sz += inc; if ( sz < 0 ) sz = 0; if ( sz > 6 ) sz = 6; startSz = sz; if (!( cEl = d.getElementById( trgt ) ) ) cEl = d.getElementsByTagName( trgt )[ 0 ]; cEl.style.fontSize = szs[ sz ]; for ( i = 0 ; i < tgs.length ; i++ ) { cTags = cEl.getElementsByTagName( tgs[ i ] ); for ( j = 0 ; j < cTags.length ; j++ ) cTags[ j ].style.fontSize = szs[ sz ]; } } </script> </head> <body> <div id="wrapper"> <div id="header"> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_POST['languages'] as $language) { switch ($language) { case 'Japanese' : echo "<div id='logo_japanese'></div>"; break; case 'Chinese' : echo "<div id='logo_chinese'></div>"; break; default: echo "<div id='logo'></div>"; break; } } ?> <ruby style='float:right; margin-top:-80px;'> <rb><a href="javascript:ts('body',2)"><button style='background-image:url(/misc/FYP/images/textchange.png); width:31px; height:29px; border:none; '></button></a> </rb> <rb><a href="javascript:ts('body',-1)" ><button style='background-image:url(/misc/FYP/images/textchangeb.png); width:23px; height:29px; border:none;'></button></a></rb> <rb><button onclick='JavaScript:changeSheets(1)' style='background-image:url(/misc/FYP/images/theme1.png); width:29px; height:29px; border:none; '></button></rb> <rb><button onclick='JavaScript:changeSheets(2)' style='background-image:url(/misc/FYP/images/theme2.png);width:29px; height:29px;border:none;' ></button></rb> <rb><button onclick='JavaScript:changeSheets(3)' style='background-image:url(/misc/FYP/images/theme3.png);width:29px; height:29px;border:none;' ></button></rb> <rb><button style='background-image:url(/misc/FYP/images/Britishflag.png);width:48px; height:20px;border:none;' ></button></rb> </ruby> <div class='greeting'> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_POST['languages'] as $language) { switch ($language) { case 'German' : echo welcome($tz_ger,$greetings_ger); break;case 'Korean' : echo welcome($tz_kor,$greetings_kor); break;case 'Russian' : echo welcome($tz_rus,$greetings_rus); break; case 'Japanese' : echo welcome($tz_jap,$greetings_jap); break; case 'Chinese' : echo welcome($tz_chi,$greetings_chi); break; default: echo welcome($tz_eng,$greetings_eng); break; } } ?></div> </div> <div id="line"></div> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_POST['languages'] as $language) { switch ($language) { case 'German' : echo makeMenu($links,$tabs_ger,$title); break; case 'Korean' : echo makeMenu($links,$tabs_kor,$title); break; case 'Russian' : echo makeMenu($links,$tabs_rus,$title); break; case 'Japanese' : echo makeMenu($links,$tabs_jap,$title); break; case 'Chinese' : echo makeMenu($links,$tabs_chi,$title); break; default: echo makeMenu($links,$tabs_eng,$title); break; } } ?> <div id="line"></div> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_POST['languages'] as $language) { switch ($language) { case 'German' : echo changeGeoLoc($GeoLoc,$details_ger,$geoplugin); break;case 'Korean' : echo changeGeoLoc($GeoLoc,$details_kor,$geoplugin); break;case 'Russian' : echo changeGeoLoc($GeoLoc,$details_rus,$geoplugin); break;case 'Japanese' : echo changeGeoLoc($GeoLoc,$details_jap,$geoplugin); break; case 'Chinese' : echo changeGeoLoc($GeoLoc,$details_chi,$geoplugin); break; default: echo changeGeoLoc($GeoLoc,$details_eng,$geoplugin); break; } } ?> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_POST['languages'] as $language) { switch ($language) { case 'Russian' : echo "<div id='welcome_pic_russian'>"; break; case 'Japanese' : echo "<div id='welcome_pic_japanese'>"; break; case 'Chinese' : echo "<div id='welcome_pic_chinese'>"; break; default: echo "<div id='welcome_pic'> "; break; } } ?> <div id="play_feature"> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_POST['languages'] as $language) { switch ($language) { case 'German' : echo selectLang($h_ger,$lang_ger,$values,$h2_ger,$lang_ger2,$countries,$day,$month,$year); break;case 'Korean' : echo selectLang($h_kor,$lang_kor,$values,$h2_kor,$lang_kor2,$countries,$day,$month,$year); break; case 'Russian' : echo selectLang($h_rus,$lang_rus,$values,$h2_rus,$lang_rus2,$countries,$day,$month,$year); break; case 'Japanese' : echo selectLang($h_jap,$lang_jap,$values,$h2_jap,$lang_jap2,$countries,$day,$month,$year); break; case 'Chinese' : echo selectLang($h_chi,$lang_chi,$values,$h2_chi,$lang_chi2,$countries,$day,$month,$year); break; default: echo selectLang($h_eng,$lang_eng1,$values,$h2_eng,$lang_eng2,$countries,$day,$month,$year); break; } } ?> <?php /* @author geoPlugin (gp_support@geoplugin.com) @copyright Copyright geoPlugin (gp_support@geoplugin.com) */ require_once('scripts/geoplugin.class.php'); $geoplugin = new geoPlugin(); $geoplugin->locate(); ?> <div id='menu2' style='width:250px; margin-left:-40px;'> </div> <div style="color:#616161; margin-left:-20px;"> <blockquote>‘<?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_POST['languages'] as $language) { switch ($language) { case 'German' : echo randomFactoid($factoidsg); break;case 'Korean' : echo randomFactoid($factoidsk); break;case 'Russian' : echo randomFactoid($factoidsr); break;case 'Japanese' : echo randomFactoid($factoidsj); break; case 'Chinese' : echo randomFactoid($factoidsc); break; default: echo randomFactoid($factoids); break; } } ?>’</blockquote> </div> </font> </div></div> <div id="homepage_text"> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_POST['languages'] as $language) { switch ($language) { case 'German' : echo "<p>text</p>"; break; case 'Korean' : echo "<p>text.</p> "; break; case 'Russian' : echo "<p>text </p>"; break; case 'Japanese' : echo "<p>text</p>"; break; case 'Chinese' : echo "<p>text</p>"; break; default: echo "<p>text</p>"; break; } } ?> </div></div> </div> </body> </html>
Это может быть выполнимо в файлах cookie / сеансах или что-то подобное, но я не знаю, как я мог бы включить cookie / session в это с тем, как я его закодировал.
Любые другие предложения, кроме cookie или сеансов, приветствуются.
Любая помощь очень ценится.
ОЧЕНЬ ВАЖНОЕ ОБНОВЛЕНИЕ * После предложений ниже я пробовал этот код: *
<?php session_start(); //put this at the top of your script on all pages that need to remember if(isset($_POST['languages'])) { $_SESSION['languages'] = $_POST['languages']; }?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Loughborough University | Students Union</title> <script type="text/javascript" src="scripts/changesheets.js"></script> <?php include("scripts/lang_change.php"); ?> <?php include("scripts/factoid_randomise.php"); ?> <?php include("scripts/greeting.php"); ?> <?php include("scripts/menu_change.php"); ?> <?php include("scripts/lang_select.php"); ?> <?php include("scripts/geo_loc_change.php"); ?> <link href="css/style.css" rel="stylesheet" type="text/css" media="screen" /> <link href="css/grey_white.css" rel="stylesheet" type="text/css" media="screen" /> <link href="css/orange_black.css" rel="stylesheet" type="text/css" media="screen" /> <link href="css/offwhite_blue.css" rel="stylesheet" type="text/css" media="screen" /> <link href="css/style.css" rel="stylesheet" type="text/css" media="screen" /> <script type="text/javascript"> //Specify affected tags. Add or remove from list: var tgs = new Array( 'div','td','tr','li','p'); //Specify spectrum of different font sizes: var szs = new Array( 'xx-small','x-small','small','medium','large','x-large','xx-large' ); var startSz = 2; function ts( trgt,inc ) { if (!document.getElementById) return var d = document,cEl = null,sz = startSz,i,j,cTags; sz += inc; if ( sz < 0 ) sz = 0; if ( sz > 6 ) sz = 6; startSz = sz; if (!( cEl = d.getElementById( trgt ) ) ) cEl = d.getElementsByTagName( trgt )[ 0 ]; cEl.style.fontSize = szs[ sz ]; for ( i = 0 ; i < tgs.length ; i++ ) { cTags = cEl.getElementsByTagName( tgs[ i ] ); for ( j = 0 ; j < cTags.length ; j++ ) cTags[ j ].style.fontSize = szs[ sz ]; } } </script> </head> <body> <div id="wrapper"> <div id="header"> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_SESSION['languages'] as $language) { switch ($language) { case 'Japanese' : echo "<div id='logo_japanese'></div>"; break; case 'Chinese' : echo "<div id='logo_chinese'></div>"; break; default: echo "<div id='logo'></div>"; break; } } ?> <ruby style='float:right; margin-top:-80px;'> <rb><a href="javascript:ts('body',2)"><button style='background-image:url(/misc/FYP/images/textchange.png); width:31px; height:29px; border:none; '></button></a> </rb> <rb><a href="javascript:ts('body',-1)" ><button style='background-image:url(/misc/FYP/images/textchangeb.png); width:23px; height:29px; border:none;'></button></a></rb> <rb><button onclick='JavaScript:changeSheets(1)' style='background-image:url(/misc/FYP/images/theme1.png); width:29px; height:29px; border:none; '></button></rb> <rb><button onclick='JavaScript:changeSheets(2)' style='background-image:url(/misc/FYP/images/theme2.png);width:29px; height:29px;border:none;' ></button></rb> <rb><button onclick='JavaScript:changeSheets(3)' style='background-image:url(/misc/FYP/images/theme3.png);width:29px; height:29px;border:none;' ></button></rb> <rb><button style='background-image:url(/misc/FYP/images/Britishflag.png);width:48px; height:20px;border:none;' ></button></rb> </ruby> <div class='greeting'> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_SESSION['languages'] as $language) { switch ($language) { case 'German' : echo welcome($tz_ger,$greetings_ger); break;case 'Korean' : echo welcome($tz_kor,$greetings_kor); break;case 'Russian' : echo welcome($tz_rus,$greetings_rus); break; case 'Japanese' : echo welcome($tz_jap,$greetings_jap); break; case 'Chinese' : echo welcome($tz_chi,$greetings_chi); break; default: echo welcome($tz_eng,$greetings_eng); break; } } ?></div> </div> <div id="line"></div> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_SESSION['languages'] as $language) { switch ($language) { case 'German' : echo makeMenu($links,$tabs_ger,$title); break; case 'Korean' : echo makeMenu($links,$tabs_kor,$title); break; case 'Russian' : echo makeMenu($links,$tabs_rus,$title); break; case 'Japanese' : echo makeMenu($links,$tabs_jap,$title); break; case 'Chinese' : echo makeMenu($links,$tabs_chi,$title); break; default: echo makeMenu($links,$tabs_eng,$title); break; } } ?> <div id="line"></div> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_SESSION['languages'] as $language) { switch ($language) { case 'German' : echo changeGeoLoc($GeoLoc,$details_ger,$geoplugin); break;case 'Korean' : echo changeGeoLoc($GeoLoc,$details_kor,$geoplugin); break;case 'Russian' : echo changeGeoLoc($GeoLoc,$details_rus,$geoplugin); break;case 'Japanese' : echo changeGeoLoc($GeoLoc,$details_jap,$geoplugin); break; case 'Chinese' : echo changeGeoLoc($GeoLoc,$details_chi,$geoplugin); break; default: echo changeGeoLoc($GeoLoc,$details_eng,$geoplugin); break; } } ?> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_SESSION['languages'] as $language) { switch ($language) { case 'Russian' : echo "<div id='welcome_pic_russian'>"; break; case 'Japanese' : echo "<div id='welcome_pic_japanese'>"; break; case 'Chinese' : echo "<div id='welcome_pic_chinese'>"; break; default: echo "<div id='welcome_pic'> "; break; } } ?> <div id="play_feature"> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_SESSION['languages'] as $language) { switch ($language) { case 'German' : echo selectLang($h_ger,$lang_ger,$values,$h2_ger,$lang_ger2,$countries,$day,$month,$year); break;case 'Korean' : echo selectLang($h_kor,$lang_kor,$values,$h2_kor,$lang_kor2,$countries,$day,$month,$year); break; case 'Russian' : echo selectLang($h_rus,$lang_rus,$values,$h2_rus,$lang_rus2,$countries,$day,$month,$year); break; case 'Japanese' : echo selectLang($h_jap,$lang_jap,$values,$h2_jap,$lang_jap2,$countries,$day,$month,$year); break; case 'Chinese' : echo selectLang($h_chi,$lang_chi,$values,$h2_chi,$lang_chi2,$countries,$day,$month,$year); break; default: echo selectLang($h_eng,$lang_eng1,$values,$h2_eng,$lang_eng2,$countries,$day,$month,$year); break; } } ?> <?php /* @author geoPlugin (gp_support@geoplugin.com) @copyright Copyright geoPlugin (gp_support@geoplugin.com) */ require_once('scripts/geoplugin.class.php'); $geoplugin = new geoPlugin(); $geoplugin->locate(); ?> <div id='menu2' style='width:250px; margin-left:-40px;'> </div> <div style="color:#616161; margin-left:-20px;"> <blockquote>‘<?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_SESSION['languages'] as $language) { switch ($language) { case 'German' : echo randomFactoid($factoidsg); break;case 'Korean' : echo randomFactoid($factoidsk); break;case 'Russian' : echo randomFactoid($factoidsr); break;case 'Japanese' : echo randomFactoid($factoidsj); break; case 'Chinese' : echo randomFactoid($factoidsc); break; default: echo randomFactoid($factoids); break; } } ?>’</blockquote> </div> </font> <a href="http://s06.flagcounter.com/more/7ydE" ><img src="http://s06.flagcounter.com/count/7ydE/bg=FFFFFF/txt=000000/border=CCCCCC/columns=3/maxflags=25/viewers=Visitors/labels=0/pageviews=1/" alt="free counters" style="border:none; margin-left:15px;"/></a></div></div> <div id="homepage_text"> <?php if(!isset($_POST['languages'])) { $_POST['languages'] = array('English'); } foreach ($_SESSION['languages'] as $language) { switch ($language) { case 'German' : echo "<p> </p>"; break; case 'Korean' : echo "<p></p> "; break; case 'Russian' : echo "<p> </p>"; break; case 'Japanese' : echo "<p>。</p>"; break; case 'Chinese' : echo "<p></p>"; break; default: echo "<p></p>"; break; } } ?> </div></div> </div> </body> </html>
КОТОРАЯ ДЕЛАЕТ РАБОТУ. ЛЮБЫЕ причины, по-видимому, сделали все, что сказали мне люди? **
Сессии или файлы cookie – это, безусловно, лучший способ сделать это: дело в том, что у вас должен быть способ связать его с пользователем. Технически вы можете сохранить его в базе данных и либо сохранить файл cookie на компьютере пользователя, который говорит, что запись в базе данных читает или даже сохраняет ip пользователя и связывает его с пользователем таким образом (хотя это довольно ненадежный метод). Но все это, вероятно, переполняет то, что вы хотите сделать.
Для начала переформатируйте то, что у вас уже есть. У вас есть $_POST['languages']
который на самом деле представляет собой массив, содержащий один результат. В этом случае вы можете также сделать строку и называть ее $_POST['language']
Вы также должны помнить о том, чтобы публиковать его правильно (в единственном числе), когда пользователь изначально выбирает свой язык.
session_start();
Мы собираемся проверить, выбрал ли пользователь язык (из переменной $_POST
) и, если да, присвойте ему переменную $_SESSION
.
if ($_POST['language']) { $_SESSION['language'] = $_POST['language']; }
Функция session variable идентична любой другой переменной, но она будет продолжаться со страницы на страницу до окончания сеанса.
Это довольно просто. В вашем примере вы проверили, какой язык был, найдя то, что пользователь «разместил»:
isset($_POST['languages'])
В нашем новом коде мы проверим переменную сеанса, которую мы только что сохранили:
$_SESSION['language']
Не нужно делать $_POST['languages']
массив, а затем использовать foreach
для его прокрутки.
Простейший способ сделать это будет следующим:
switch($_SESSION['language']) { case "german": //do german suff case "english": //do english suff etc... }
Кроме того, вы сначала проверили, был ли тег сеанса пустым, а затем положил значение, если оно не было. Вы можете пропустить этот шаг и вместо этого вставить внутри switch() { }
в конце, после всех случаев:
default: //do default language stuff
Сессию можно использовать в этой ситуации. Вы можете назначить эти значения в переменной сеанса и получить доступ ко всем страницам приложения.
$_SESSION['somevar']='someval';
Вы должны серьезно взглянуть на использование gettext для управляемой поддержки локализации. Вместо того, чтобы делать условные обозначения для каждой части вашей страницы, вы просто вызываете функцию типа <?php _('Welcome!') ?>
И она будет автоматически переведена в соответствии с настройками вашего языка.
Как сеанс:
session_start(); //put this at the top of your script on all pages that need to remember if(isset($_POST['languages'])) { $_SESSION['languages'] = $_POST['languages']; }
Затем измените:
foreach ($_POST['languages'] as $language) {
в
foreach ($ _SESSION ['languages'] как $ language) {
Как печенье:
if(isset($_POST['languages'])) { setcookie('language', $_POST['languages'], 7776000) //sets cookie for 90 days, or 7776000 seconds }
и измените foreach ($ _POST ['languages'] как $ language) {
в
foreach ($_COOKIE['languages'] as $language) {
Я считаю, что этот ответ завершен … вы намерены поддерживать несколько языков?
<?php session_start(); if (isset($_GET['lang'])) { $_SESSION['lang'] = $_GET['lang']; } if (isset($_SESSION['lang'])) { define(LANGUAGE, $_SESSION['lang']); } else { define(LANGUAGE, 'en_GB'); } include 'languages/'.LANGUAGE.'.php'; ?>
Добавьте верхнюю часть кода, напишите «session_start ();» После этого, всякий раз, когда будет отправлено обновление, обновите соответствующий индекс массива $ _SESSION (вы можете выбрать такие имена, как «регион», «язык», «lng» – выбор зависит от вас, пока вы несовместимы). Затем, когда вы загружаете страницу, загружайте ее в зависимости от значения в массиве $ _SESSION. См. Также: http://il2.php.net/manual/en/book.session.php
После всех связанных обновлений сеанса – главное, что вы устанавливаете переменные $_SESSION
. Он показывает, что вы получаете его от $_POST
, но в коде нет места, которое фактически отправляет значение. Вы указываете, что кто-то нажимает, чтобы изменить язык – это делается через форму submit или через URL-адрес?
Добавьте дамп переменной $_SESSION
сразу после установки значения языка и посмотрите, действительно ли он установлен … Я чувствую, что вы никогда не доходите до этой строки кода, так как у вас нет переменной $_POST
определенной где угодно. ..
Единственная проблема с переменной сеанса заключается в том, что пользователь больше не может изменять настройки, если это то, что вы хотите! Но также должно быть возможно использование скрытой входной переменной на каждой странице. На самом деле я все время использую скрытую переменную ввода, а также сжимаю эту переменную, поэтому она довольно быстрая и безопасная, а также я использую ajax.
Очень трудно прочитать длинный примерный код. Уменьшите размер нерабочего примера.
Код сеанса PHP опирается на идентификатор SESSION. Существует два способа переноса этих идентификаторов с веб-страницы на веб-страницу: POST и GET. Но я вижу, что вы поддерживаете только один метод POST. В случае GET вы должны добавить SID идентификатора SESSION SID в URL, используемый для навигации.
Подробности обработки идентификаторов SESSION описаны в документации PHP:
Передача идентификатора сеанса