Здравствуй, уважаемый друг!

Кажется, ты используешь AdBlock. Этот проект развивается и существует за счет доходов от рекламы.
Добавь, пожалуйста, нас в исключения.

Спасибо за понимание.

Теперь мы команда!

Как в Opencart получить код языка по-умолчанию

Автор: в категории Статьи о php 2 комментария

Работая над модулем SEO URL для мультиязычного интернет магазина, я столкнулся с проблемой получения кода языка  по-умолчанию. Интересный факт, однако с помощью привычной конструкции, позволяющей получить настройки интернет магазина, $this->config->get(‘config_language’) нельзя получить код языка пользовательской части по-умолчанию.

Opencart get default shop language

Однако, необходимо было решить задачу, и я нашел решение. Что ж, давайте вместе разберемся с данной проблемой.

В процессе написания плагинов и модулей для Opencart, в контроллере можно получить доступ к настройкам самого магазина, или же отдельных модулей, однако каково было мое удивление, когда при разработке модуля SEO URL для многоязычного интернет магазина, при обращении к массиву конфигурации $this->config->get(‘config_language’) я получал текущий язык, который выбрал пользователь.

То есть в данном массиве хранится код языка, на котором пользователь просматривает интернет магазин, и отнюдь не язык по-умолчанию: если по-молчанию стоит русский язык, а пользователь зашел и выбрал английский, то значение переменной $this->config->get(‘config_language’) будет «en».

Дело в том, что в файле index.php, где формируются все основные конфигурационные массивы и данные в данную переменную записывается значение текущего языка! Вот строки файла index.php, в которых видно, как в переменную заносится значение текущего языка:

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
$code = $session->data['language'];
} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
$code = $request->cookie['language'];
} elseif ($detect) {
$code = $detect;
} else {
$code = $config->get('config_language');
}

if (!isset($session->data['language']) || $session->data['language'] != $code) {
$session->data['language'] = $code;
}

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);
}

$config->set('config_language_id', $languages[$code]['language_id']);
$config->set('config_language', $languages[$code]['code']);

А как же в контроллере получить язык по-молчанию, установленный в административной части для фронтенда? После недолгого поиска необходимой информации, я пришел к выводу что сделать это все-таки можно, правда не так просто и красиво, как это можно было бы сделать, используя основной массив конфигурации.


$this->load->model('setting/setting');
$store_settings_config = $this->model_setting_setting->getSetting("config", $this->config->get('config_store_id'));

echo $store_settings_config['config_language']; // Вот тут наш язык по-умолчанию

Вот таким вот нехитрым образом, хоть и сложнее, чем обращение в конфигурационный массив, можно получить язык пользовательской части вашего интернет магазина на Opencart по-умолчанию.

Данный пост размещаю тут больше, пожалуй, для себя, на будущее, однако если вы это читаете и вам помогло мое решение, не поленитесь и поставьте лайк, напишите комментарий. Заранее спасибо. Если возникли вопросы или предложения — пишите, обсудим.

Вверх!

Меню блога

Категории блога

Облако тегов