Если вы откроете файл: index.php или startup.php (в зависимости от используемой вами версии OpenCart), вы увидите, что есть код, который проверяет URL-адрес, который посетил пользователь, а затем выполняет поиск в базе данных, чтобы узнать, является ли это магазином по умолчанию. (store_id = 0) или другой магазин. Если это магазин по умолчанию, то ничего не меняется. Если это не так, то переменная сеанса (store_id) изменяется на указанный store_id, и весь opencart будет работать на основе этого store_id.
OpenCart 1.5.x index.php
// Store
if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {
$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
} else {
$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
}
if ($store_query->num_rows) {
$config->set('config_store_id', $store_query->row['store_id']);
} else {
$config->set('config_store_id', 0);
}
OpenCart 2.x / 3.x - catalog/controller/startup/startup.php
// Store
if ($this->request->server['HTTPS']) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $this->db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
} else {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $this->db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
}
if (isset($this->request->get['store_id'])) {
$this->config->set('config_store_id', (int)$this->request->get['store_id']);
} else if ($query->num_rows) {
$this->config->set('config_store_id', $query->row['store_id']);
} else {
$this->config->set('config_store_id', 0);
}
Таким образом, вы можете расширить этот код, и вы проверите язык браузера и на основе каждого языка измените store_id на тот, который вам нужен.
Ниже приведен пример кода, он не идеален, но он даст вам представление о том, как реализовать его самостоятельно.
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
switch ($lang){
case "fr":
$this->config->set('config_store_id', 1);
break;
case "it":
$this->config->set('config_store_id', 2);
break;
case "en":
$this->config->set('config_store_id', 3);
break;
case "el":
$this->config->set('config_store_id', 4);
break;
default:
//else default store
$this->config->set('config_store_id', 0);
break;
}
Надеюсь, приведенный выше ответ поможет вам. Это просто, но вам нужно понимать, как работает OpenCart. Также мой совет... "Не ждите готовых расширений, попробуйте сделать свое." ;)
Ваше здоровье!
person
Konstantinos
schedule
23.08.2017
catalog/view/theme/<<themname>>/common/header.tpl
(или .twigg), который должен отображать селектор языка. Я могу помочь с кодом для шаблона по умолчанию, но если вы его не используете и плохо разбираетесь в коде, вам все равно может быть сложно. - person Daniel   schedule 23.08.2017event.preventDefault();
оказалась безуспешной. Я не знаю, как часто вы планируете добавлять или удалять языки, но это довольно простая задача по сравнению с написанием одной строки в заголовочном файле каждого шаблона магазина. Возможно, у кого-то есть лучшее решение? - person Daniel   schedule 23.08.2017