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

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

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

Создание сайтов Харьков

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

4 марта 2015 в 16:00 Автор: Nikita_Sp в категории Статьи о 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 по-умолчанию.

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

2 комментария

  • Здравствуйте.
    Видно вы знаете о чём пишите. Помогите, пожалуйста, в маленькой задачке:
    — мультимагазин в котором для каждого поддомена используется свой язык
    — стандартно опенкарт выдаёт языки как попало, не принимая во внимание значения установленные в настройках магазина.

    Вопрос: можно ли (и как) редактируя файл index.php каждого поддомена выбрать для каждого свой язык.

    Провозился пару часов, но т.к. не понимаю что нужно изменить — ничего не получается.

    например нужно установить язык «Moskva»
    id = 3
    файл moskow
    директория moskow
    код msk

    Помогите, пожалуйста. Готов оплатить ваши услуги.

    • Добрый день!
      Честно, пока не сталкивался с мультимагазинами на Opencart.

      Т.е. вам необходимо чтобы под каждый магазин был свой язык, а настроки для каждого магазина он игнорирует? Это очень странно.
      Как вариант можно в index.php прописать хардкодом проверку на поддомен и устанавливать в сессию язык нужный в зависимости от поддомена.

      А вообще бы я поигрался бы еще с настройками.

Добавить комментарий для Nikita Sp Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вверх!

Меню блога

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

Облако тегов