Здравствуйте, я подключил свою тему на сайте, теперь мне надо перед каждой загрузки страницы, чтобы в куки создавалась(обновлялась) язык сайта.
Сделал, вот так(расположение - /themes/mytheme/mytheme.theme):
<?php
function mytheme_preprocess_node(&$variables) {
$session = \Drupal::request()->getSession();
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
setcookie('lang_site', '', time() - 3600);
setcookie('lang_site', $language, time()+3600, '/');
}
?>
Я думаю, что это вообще не правильно, т.к. еще он не всегда обновляет, 1-2 раза обновит и все, пока кэш не сбросишь.
Комментарии
Может кто подсказать?
Как можно перед загрузкой страницы перезаписывать в куки язык сайта?
Зачем записывать язык в куки?
А почему нет? Допустим пользователь зашел на сайт, выставил язык и при последующем входе этот язык по умолчанию.
Долго рассказывать, мне приходится использовать iframe на сайте, и там надо получить какой язык на сайте, и я нашёл единственный вариант через куки.
https://prnt.sc/vxer4q
А вот это не то?
Он в сессию записывает?
Я хз, никогда не пользовался этой опцией) У меня обычно языки по префиксам пути различаются.
В куках нету, он скорей всего в сессию друпала записывает
А зачем вообще куки? Друпал ставит на тег html атрибут lang. Можно использовать его значение через jQuery.
думал об этом, но мне в PHP надо получить это
То есть после того фрагмента кода, что вы привели в первом посте, вы не знаете, как получить текущий язык в PHP? Серьёзно?
я Вам говорю, что на странице я подключаю Iframe, и в нем мне надо получить язык сайта
Из вашей постановки задачи абсолютно ничего непонятно. А именно:
1. Непонятно, вы вставляете друпаловский айфрейм на сторонний сайт, либо сторонний айфрейм на дрпаловский сайт.
2. Непонятно, язык какой страницы вы хотите получить - той, на которой расположен айфрейм или той, которая внутри айфрейма.
3. вы "подключаете айфрейм" - что под этим подразумевается? Вы его выводите текстом, хардкодите в шаблон, выводите через модуль iframe или как?
1. сторонний айфрейм на дрпаловский сайт
2. Сайт где расположен iframe, Сайт Друпал.
3. Кодом, через тег в шаблоне
<?php
function mytheme_preprocess_node(&$variables) {
$variables['language'] = \Drupal::languageManager()->getCurrentLanguage()->getId();
}
?>
node.html.twig
Об этом тоже думал, но этот вариант не подходит, т.к. в этом фрейме можно переходить по страницами, и получается, что ссылка уже меняется.
Самый лучший способ это либо в Сессию, либо в Куки, но в Сессию не получится, т.к. Сессия Друпала и Фрейма отличается.
Как в Друпале правильно записать значение в куки?