Как сделать скрипт более мультифункциональным PHP?
Добрый день есть следующий скрипт
<?php $urlCurrent = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; #получаем нужный URL ?> //
<?php $langed= ICL_LANGUAGE_CODE; #функция плагина для вывода текущего языка ?>
<?php $newUrlEn = str_replace('/ru/', '/en/', $urlCurrent); ?>
<?php $newUrlUa = str_replace('/ru/', '/ua/', $urlCurrent); ?>
Ситуация такая, у меня есть сайт, на 3 языках. Ru/En/UA. URL у них такая site.ru/en/contacts site.ru/ru/contacts site.ru/ua/contacts Т.е делается таким образом что бы лишь язык менялся
Проблема лишь в том что str_replace можно использовать не всегда Если к примеру пользователь будет на Украинской версии то str_replace не найдет /ru/ в URL И таким образом возникает вопрос, как сделать что бы находясь на любом языке я мог бы получить в перемене все 3 url К примеру я нахожу на странице о нас
site.ru/ua/about Получить в переменах еще
site.ru/en/about
site.ru/ru/about
Ответы (3 шт):
$currentURL = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$regions = [ '/ru/','/en/','/ua/' ];
$regionalLink['ru'] = str_replace( $regions, '/ru/', $currentURL );
$regionalLink['en'] = str_replace( $regions, '/en/', $currentURL );
$regionalLink['ua'] = str_replace( $regions, '/ua/', $currentURL );
Результат:
Array
(
[ru] => https://mywebsite.ru/ru/contacts/
[en] => https://mywebsite.ru/en/contacts/
[ua] => https://mywebsite.ru/ua/contacts/
)
$currentUrl = $_SERVER['HTTPS'] ? "https://" : "http://";
$currentUrl .= "{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$langs = ['/ru/', '/ua/', '/en/'];
foreach ($langs as $lang) {
$langsUrl[trim ($lang, '/')] = str_replace ($langs, $lang, $currentUrl);
}
var_dump ($langsUrl);
Выход: array(3) { ["ua"]=> string(23) "http://site.ru/ua/about" ["en"]=> string(23) "http://site.ru/en/about" ["ru"]=> string(23) "http://site.ru/ru/about" }
Так навскидку если вдруг сайтов станет больше накидал примерчик из вашего
<?php
$urlCurrent = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$languages = ['en','ru','ua'];
$langed = ICL_LANGUAGE_CODE;
// пройдем по всем языкам и посмотрим совпадает ли с шаблоном
foreach($languages as $lang){
$template = explode('/'.$lang.'/',$urlCurrent);
if( count($template) === 2){
break;
}
}
// если шаблон отсутствует прекращаем работу
if(count($template) !== 2 ){
throw new RuntimeException('url неправильный');
}
$current = $lang;
$menuItems = [];
foreach($languages as $lang){
if( $lang !== null && $lang !== $current ){
$menuItems[$lang] = implode('/'.$lang.'/', $template);
}
}
// Результат в $menuItems
var_export($menuItems);