<a>
?<div class="ru"><a href="текущая страница(как это сделать???)" data-lang="ru" class="active">Rus</a></div>
<div class="ro"><a href="текущая страница(как это сделать???)" data-lang="ro">Ro</a></div>
include
// Сохраняем язык в сессии
$_SESSION['NowLang'] = то, что получили из data-lang;
// Открываем текущий язык
$CurentLang = addslashes($_SESSION['NowLang']);
include_once ("lang/lang.".$CurentLang.".php");
$Lang = array(
"title" => "Мой многоязычный сайт на PHP",
"header_title" => "Многоязычный сайт",
"site_slogan" => "Сайт программиста",
// Меню
"index_menu" => "Главная страница",
"contact_menu" => "Контакты",
"site_map" => "Карта сайта",
"advertisement"=> "Реклама",
);
необходимо при клике на кнопку получить значение
1) Получить значение данного атрибута, которое может быть либо ro либо ru
2) Записать полученное значение в сессию
Покажите как это делается без GET
<a href="javascript:void(0);" class="change-lang" data-lang="ru">RU</a>
<a href="javascript:void(0);" class="change-lang" data-lang="ro">RO</a>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
$('a.change-lang').click(function () {
let lang = $(this).data('click');
$.cookie('lang', lang);
});
// читаем куки и записываем значение lang
// если не была установлена кука lang пишем по-умолчанию RU
$language = $_COOKIE['lang'] ?? 'RU';
// если значение lang есть в массиве $LangArray, то записываем в сессию значение
// иначе - записыавем значение по-умолчанию
$_SESSION['NowLang'] = in_array($language, $LangArray) ? $language : $DefaultLang;
$('a.change-lang').click(function () {
let lang = $(this).data('click');
$.cookie('lang', lang);
});
<script>
/*! jquery.cookie v1.4.1 | MIT */
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?a(require("jquery")):a(jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});
</script>
Не работает у меня GET в MVC
Строка ошибки: $.cookie('lang', lang);
я уже писал не нужно хранить язык в куках/сессии.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title><?php echo $Lang['title']; ?></title>
<link rel="stylesheet" href="src/css/styles.css">
<link rel="stylesheet" href="src/fonts/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="slick/slick-theme.css"/>
<link href="lightbox2/src/css/lightbox.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script>
/*! jquery.cookie v1.4.1 | MIT */
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?a(require("jquery")):a(jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});
</script>
<div class="language wrapper">
<div class="ru"><a href="javascript:void(0);" class="change-lang active" data-lang="ru">ru</a></div>
<div class="ro"><a href="javascript:void(0);" class="change-lang" data-lang="ro">ro</a></div>
</div>
<script src="src/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="slick/slick.min.js"></script>
<script type="text/javascript" src="lightbox2/src/js/lightbox.js"></script>
<script src="src/js/main.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.sl').slick({
dots:true,
arrows: false
});
$('.multi_sl').slick({
rows:2,
slidesToShow:3
});
$('a.change-lang').click(function () {
let lang = $(this).data('click');
$.cookie('lang', lang);
});
});
</script>
</body>
</html>
@session_start();
// Массив доступных для выбора языков
$LangArray = array("ru", "ro");
// Язык по умолчанию
$DefaultLang = "ru";
// Если язык уже выбран и сохранен в сессии отправляем его скрипту
if(@$_SESSION['NowLang']) {
// Проверяем если выбранный язык доступен для выбора
if(!in_array($_SESSION['NowLang'], $LangArray)) {
// Неправильный выбор, возвращаем язык по умолчанию
$_SESSION['NowLang'] = $DefaultLang;
}
}
else {
$_SESSION['NowLang'] = $DefaultLang;
}
// читаем куки и записываем значение lang
// если не была установлена кука lang пишем по-умолчанию RU
$language = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : 'ru';
// если значение lang есть в массиве $LangArray, то записываем в сессию значение
// иначе - записыавем значение по-умолчанию
$_SESSION['NowLang'] = in_array($language, $LangArray) ? $language : $DefaultLang;
// Открываем текущий язык
$CurentLang = addslashes($_SESSION['NowLang']);
include_once ("lang/lang.".$CurentLang.".php");
$Lang = array(
"title" => "Мой многоязычный сайт на PHP",
"header_title" => "Многоязычный сайт",
"site_slogan" => "Сайт программиста",
// Меню
"index_menu" => "Главная страница",
"contact_menu" => "Контакты",
"site_map" => "Карта сайта",
"advertisement"=> "Реклама",
);
let lang = $(this).<b>data</b>('click');
let lang = $(this).<b>data-lang</b>('click');
$('a.change-lang').click(function () {
let lang = $(this).data('click');
$.cookie('lang', lang);
});
я так понимаю, что правильнее написать не
let lang = $(this).data('click');
А
let lang = $(this).data-lang('click');
<div class="ru"><a href="javascript:void(0);" class="change-lang active" data-lan="ru">ru</a></div>
<div class="ro"><a href="javascript:void(0);" class="change-lang" data-lan="ro">ro</a></div>
$('a.change-lang').click(function () {
let lang = $(this).data-lan('click');
$.cookie('lang', lang);
});
$('a.change-lang').click(function () {
let language = $(this).data('lang');
});
$language = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : 'ru';
$_SESSION['NowLang'] = in_array($language, $LangArray) ? $language : $DefaultLang;
// Открываем текущий язык
$CurentLang = addslashes($_SESSION['NowLang']);
include_once ("lang/lang.".$CurentLang.".php");
убрал эти куки $.cookie('lang', lang); вообще и оставил:собственно в этой строчке ошибка возникала из за того что в предыдущей строке был бред: let lang = $(this).data-lan('click'); (так как такого атрибута нет, в lang попадало неизвестное значение). Теперь вы эту проблему убрали и заодно выключили строку которая должна была реально что-то делать. Класс.
в index.php убрал строчкупонятно что теперь куки проверять бесполезно, вы же в них ничего не писали, однако сейчас неплохо было бы вернуть эту строку обратно и заодно в яваскрипте разобраться как добавить куки. После этого возможно все будет гораздо интереснее.
$language = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : 'ru';
$('a.change-lang').click(function (e) { //ловим клик
e.preventDefault(); // говорим что по ссылке не надо уходить
let lang = $(this).data('lang'); // получаем значение дата-атрибута
document.cookie = "lang="+ lang+"; path=/;"; // записываем в куки язык
window.location.reload(); // перегружаем страничку что бы можно было из пхп прочесть куки.
})
<a href="javascript:void(0);" class="change-lang active" data-lan="ru">ru</a>
Пришлось добавить $lang = "";это куда и зачем?
e.preventDefault(); // говорим что по ссылке не надо уходить
$lang = "";
let lang = $(this).data('lang'); // получаем значение дата-атрибута
document.cookie = "lang="+ lang +"; path=/;"; // записываем в куки язык
$language = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : 'ru';
// если значение lang есть в массиве $LangArray, то записываем в сессию значение
// иначе - записыавем значение по-умолчанию
$_SESSION['NowLang'] = in_array($language, $LangArray) ? $language : $DefaultLang;
// Открываем текущий язык
$CurentLang = addslashes($_SESSION['NowLang']);
include_once ("lang/lang.".$CurentLang.".php");
в переменной $CurentLang нужное значение - ru/roто
$CurentLang = addslashes($_SESSION['NowLang']); // хз зачем это тут
$includePath = $_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR."lang/lang.".$CurentLang.".php";
var_dump($includePath); // думаю что здесь явно какая то лажа с путями
include_once ($includePath);
Но title, который должен измениться - не меняется! Что делать!?для начала убедиться что в переменной лежит то что вы ожидаете, а так же подключается то что надо, ну и убедиться что загрузка переменной из инклуда происходит раньше чем вывод в хеадер.
для начала убедиться что в переменной лежит то что вы ожидаете
$Lang = array(
"title" => "Мой многоязычный сайт на PHP",
"header_title" => "Многоязычный сайт",
"site_slogan" => "Сайт программиста",
// Меню
"index_menu" => "Главная страница",
"contact_menu" => "Контакты",
"site_map" => "Карта сайта",
"advertisement"=> "Реклама",
);
а так же подключается то что надо
ну и убедиться что загрузка переменной из инклуда происходит раньше чем вывод в хеадер
Скорее всего это происходит одинаково!если имеется в виду одновременно то так не бывает, понятие одновременно вообще не применимо к нашей реальности, а уж к порядку выполнения точно никакого одновременно быть не может.
echo "ru content loaded";
, и проверьте где выводится.