Я буду знать, как, если возможно, изменить этот элемент. проблема появляется, когда я хочу изменить язык на сайте
в моем индексе (обычный URL):
http://localhost/test/boutique/index.php?language=en
http://localhost/test/boutique/index.php?language=fr
После того, как это не проблема для навигации по сайту. Это правильно
Но если зайти внутрь моего товара
Нормальный URL должен быть:
localhost/test/boutique/index.php?Products&Description&products_id=1
Если я поменяю язык, у меня будет:
локальный / тест / бутик / index.php? Продукты = & Description = & products_id = 1 & язык = фр
правильный URL должен быть:
localhost/test/boutique/index.php?Products&Description&products_id=1&language=en
Есть проблема с этим, я думаю: =&
Есть функция, связанная с этим.
public function getLanguageText() {
$languages_string = '';
$get_params = [];
foreach ( $_GET as $key => $value ) {
// I think somethinf must change here.
if (($key != 'language') && ($key != Registry::get('Session')->getName()) && ($key != 'x') && ($key != 'y')) {
$get_params[] = $key . '=' . $value;
}
}
//var_dump($get_params)
$get_params = implode($get_params, '&');
if ( !empty($get_params) ) {
$get_params .= '&';
}
foreach ($this->getAll() as $value) {
$languages_string .= ' ' . HTML::link(OSCOM::link('index.php', $get_params . 'language=' . $value['code']), $value['name']) . ' ';
}
return $languages_string;
}
var_dump ($ get_params):
0 => string 'Products=' (length=9)
1 => string 'Description=' (length=12)
2 => string 'products_id=1languageen' (length=23) ===> pb here
Как исправить эту функцию?
Tk
элемент о:
var_dump($_GET);
var_dump($key);
var_dump($value);
array (size=4)
'Products' => string '' (length=0)
'Description' => string '' (length=0)
'products_id' => string '2' (length=1)
'language' => string 'fr' (length=2)
/home/www/test/boutique/includes/OM/Language.php:562:string 'Products' (length=8)
/home/www/test/boutique/includes/OM/Language.php:563:string '' (length=0)
/home/www/test/boutique/includes/OM/Language.php:561:
array (size=4)
'Products' => string '' (length=0)
'Description' => string '' (length=0)
'products_id' => string '2' (length=1)
'language' => string 'fr' (length=2)
/home/www/test/boutique/includes/OM/Language.php:562:string 'Description' (length=11)
/home/www/test/boutique/includes/OM/Language.php:563:string '' (length=0)
/home/www/test/boutique/includes/OM/Language.php:561:
array (size=4)
'Products' => string '' (length=0)
'Description' => string '' (length=0)
'products_id' => string '2' (length=1)
'language' => string 'fr' (length=2)
/home/www/test/boutique/includes/OM/Language.php:562:string 'products_id' (length=11)
/home/www/test/boutique/includes/OM/Language.php:563:string '2' (length=1)
/home/www/test/boutique/includes/OM/Language.php:561:
array (size=4)
'Products' => string '' (length=0)
'Description' => string '' (length=0)
'products_id' => string '2' (length=1)
'language' => string 'fr' (length=2)
/home/www/test/boutique/includes/OM/Language.php:562:string 'language' (length=8)
/home/www/test/boutique/includes/OM/Language.php:563:string 'fr' (length=2)
для информации:
ссылка на общедоступную статическую функцию ($ page, $ parameters = null, $ add_session_id = true, $ search_engine_safe = true) {
$page = HTML::sanitize($page);
$site = $req_site = static::$site;
if ((strpos($page, '/') !== false) && (preg_match('/^([A-Z][A-Za-z0-9-_]*)\/(.*)$/', $page, $matches) === 1) && OSCOM::siteExists($matches[1], false)) {
$req_site = $matches[1];
$page = $matches[2];
}
if (!is_bool($add_session_id)) {
$add_session_id = true;
}
if (!is_bool($search_engine_safe)) {
$search_engine_safe = true;
}
if (($add_session_id === true) && ($site !== $req_site)) {
$add_session_id = false;
}
$link = static::getConfig('http_server', $req_site) . static::getConfig('http_path', $req_site) . $page;
if (!empty($parameters)) {
$p = HTML::sanitize($parameters);
$p = str_replace([
"\\", // apps
'{', // product attributes
'}' // product attributes
], [
'%5C',
'%7B',
'%7D'
], $p);
$link .= '?' . $p;
$separator = '&';
} else {
$separator = '?';
}
while((substr($link, -1) == '&') || (substr($link, -1) == '?')) {
$link = substr($link, 0, -1);
}
// Добавить идентификатор сеанса при перемещении с разных серверов HTTP и HTTPS или при определении SID
if (($ add_session_id === true) && Registry :: exist ('Session')) {
$ OSCOM_Session = Registry :: get ('Session');
if ($OSCOM_Session->hasStarted() && ($OSCOM_Session->isForceCookies() === false)) {
if ((strlen(SID) > 0) || (((HTTP::getRequestType() == 'NONSSL') && (parse_url(static::getConfig('http_server', $req_site), PHP_URL_SCHEME) == 'https')) || ((HTTP::getRequestType() == 'SSL') && (parse_url(static::getConfig('http_server', $req_site), PHP_URL_SCHEME) == 'http')))) {
$link .= $separator . HTML::sanitize(session_name() . '=' . session_id());
}
}
}
while(strpos($link, '&&') !== false) {
$link = str_replace('&&', '&', $link);
}
if ($search_engine_safe === true && defined('SEARCH_ENGINE_FRIENDLY_URLS') && (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && SEFU::start() && static::getSite() != 'Admin') {
$link = str_replace(['?', '&', '='], '/', $link);
}
return $link;
}
и SEFU:
класс SEFU реализует \ OM \ ServiceInterface {
публичная статическая функция start () {
if ( isset($_SERVER['ORIG_PATH_INFO']) ) {
if ( isset($_SERVER['PATH_INFO']) && empty($_SERVER['PATH_INFO']) ) {
$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
}
}
if ( isset($_SERVER['PATH_INFO']) && (strlen($_SERVER['PATH_INFO']) > 1) ) {
$parameters = explode('/', substr($_SERVER['PATH_INFO'], 1));
$_GET = [];
$GET_array = [];
$i = 0;
foreach ( $parameters as $parameter ) {
$param_array = explode(',', $parameter, 2);
if ( !isset($param_array[1]) ) {
$param_array[1] = '';
}
if ( strpos($param_array[0], '[]') !== false ) {
$GET_array[substr($param_array[0], 0, -2)][] = $param_array[1];
} else {
$_GET[$param_array[0]] = $param_array[1];
}
$i++;
}
if ( count($GET_array) > 0 ) {
foreach ( $GET_array as $key => $value ) {
$_GET[$key] = $value;
}
}
}
return true;
}
public static function stop() {
return true;
}