RizVN Login



OpenCart 2: Получаем в админке текущие настройки языка (OC 2.0, 2.1, 2.2)

OpenCart 2: Получаем в админке текущие настройки языка (OC 2.0, 2.1, 2.2) В одной из предыдущих статей я показывал, как можно получить в коде админки OpenCart 2 текущие настройки валюты. В этой же статье я расскажу про код для получения настроек языка в OpenCart 2.0, 2.1 и 2.2. И как я уже упоминал, к сожалению, и в этом вопросе без еще одной простыни кода не обойтись, хотя казалось бы задача должна решаться тривиально. Но увы, если вы не подойдете к задаче со скрупулезностью, то в ряде ситуаций у вас будут возникать совершенно неожиданные ошибки. Поэтому, в данной статье я опишу как получить текущие настройки языка для версий OpenCart 2.0, 2.1 и 2.2. И тут так же, как и в прошлой статье, основной код в основном вырос благодаря версии 2.2.

Методом проб, ошибок, дебага, поиска в интернете и ответа на вселенские вопросы, получилась следующая конструкция:

<?php
... Controller ...
...
// Загружаем модель
$this->load->model('localisation/language');
$list_lang = $this->model_localisation_language->getLanguages();
// Загружаем текущий язык 
$language = reset($list_lang);
// Получаем код языка из админки
$langs_temp = $this->config->get('config_admin_language');
if (isset($langs_temp) && !empty($langs_temp))
{
    // Получаем язык
    $language = $list_lang[$this->config->get('config_admin_language')];
}
// Вытаскиваем текущий код (к сожалению, это конструкция не универсальна...)
$langs_temp = $this->language->get('code');
if (isset($langs_temp) && !empty($langs_temp))
{
    // Смотрим, есть ли такой язык
    if (isset($list_lang[$this->language->get('code')]))
    {
        // Получаем настройки языка
        $language = $list_lang[$this->language->get('code')];
    }
}
// Смотрим есть ли локализация в сессии
if (isset($this->session->data['language']))
{
    // Получаем текущий язык
    $language = $list_lang[$this->session->data['language']];
}
// Возвращаем настройки языка
return $language;
...

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

А теперь, пройдусь по основным причинам, почему настройки языка получаются парой десятком строк:

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

2. Во-вторых, проблема с заполнением сессионных переменных. Код вида "$this->session->data['language']" легко вернет вам ошибку отсутствия элемента в массиве. В данном случае вспоминается фраза "должен - не значит обязан". Ошибка легко воспроизводится открытием админки, минуя открытие сайта. Если ранее сессия еще не была создана для пользователя и нормально инициализирована, то элемент "language" будет пустым.

3. В-третьих, как бы это не было, но приходится даже рассчитывать на гипотетический случай, что все значения текущего кода окажутся пустыми (код в самом начале "$language = reset($list_lang);", получающий любой первый набор настроек языка).

Безусловно, хочется верить, что со временем все эти сложности будут решены и на уровне движка появятся отдельные функции для корректного получения настроек языка, валюты и прочего без необходимости создания простыней кода. Однако, на текущий момент для поддержания версий OpenCart 2.0, 2.1 и 2.2 приходится использовать такие вот конструкции.

Надеюсь, моя статья помогла вам решить ваши проблемы и сэкономила вам лишний час времени.

1 1 1 1 1 1 1 1 1 1 Рейтинг 5.00 (1 Голос)

Добавить комментарий / отзыв

Комментарий - это вежливое и наполненное смыслом сообщение (правила).


Введите защитный код

Обновить
Защитный код

Каталог программ