Как в Opencart получить код языка по-умолчанию
4 марта 2015 в 16:00 в категории Статьи о php 2 комментарияРаботая над модулем SEO URL для мультиязычного интернет магазина, я столкнулся с проблемой получения кода языка по-умолчанию. Интересный факт, однако с помощью привычной конструкции, позволяющей получить настройки интернет магазина, $this->config->get(‘config_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 по-умолчанию.
Данный пост размещаю тут больше, пожалуй, для себя, на будущее, однако если вы это читаете и вам помогло мое решение, не поленитесь и поставьте лайк, напишите комментарий. Заранее спасибо. Если возникли вопросы или предложения — пишите, обсудим.
2 комментария
Здравствуйте.
Видно вы знаете о чём пишите. Помогите, пожалуйста, в маленькой задачке:
— мультимагазин в котором для каждого поддомена используется свой язык
— стандартно опенкарт выдаёт языки как попало, не принимая во внимание значения установленные в настройках магазина.
Вопрос: можно ли (и как) редактируя файл index.php каждого поддомена выбрать для каждого свой язык.
Провозился пару часов, но т.к. не понимаю что нужно изменить — ничего не получается.
например нужно установить язык «Moskva»
id = 3
файл moskow
директория moskow
код msk
Помогите, пожалуйста. Готов оплатить ваши услуги.
Добрый день!
Честно, пока не сталкивался с мультимагазинами на Opencart.
Т.е. вам необходимо чтобы под каждый магазин был свой язык, а настроки для каждого магазина он игнорирует? Это очень странно.
Как вариант можно в index.php прописать хардкодом проверку на поддомен и устанавливать в сессию язык нужный в зависимости от поддомена.
А вообще бы я поигрался бы еще с настройками.