RizVN Login



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

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

Начну с кода для OpenCart 2.0 и 2.1:

<?php
... Controller ...
...
// Загружаем модель
$this->load->model('localisation/currency');
// Получаем список
$currencies = $this->model_localisation_currency->getCurrencies();
// Берем текущие настройки валюты
$currency = $currencies[$this->currency->getCode()];
...

Как видите ничего сложного. Загружаем модель, получаем список валют и берем текущую валюту. Но, для OpenCart 2.2 такая конструкция вызовет ошибку. Поэтому, его нужно дополнить.

Теперь, посмотрим код для получения текущих настроек валюту для OpenCart 2.0, 2.1 и 2.2:

<?php
... Controller ...
...
// Загружаем модель
$this->load->model('localisation/currency');
// Получаем список валют
$currencies = $this->model_localisation_currency->getCurrencies();
// Проверяем, что метод getCode существует (в 2.2 он вырезан)
if (method_exists($this->currency, 'getCode')){
    // Получаем нормальным образом текущую валюту
    $currency = $currencies[$this->currency->getCode()];
}
// А теперь, перейдем к 2.2
else {
    // Чтобы не было неожиданностей, 
    // которые возникают из-за отсутствия данных 
    // в настройках и прочего
    // Берем самую первую валюту из списка
    $currency = reset($currencies);
    
    // Пытаемся получить валюту из настроек админки
    $temp_curr = $this->config->get('config_currency');
    // Если таковая нашлась
    if (isset($temp_curr) && !empty($temp_curr))
    {
        // Получаем валюту
        $currency = $currencies[$this->config->get('config_currency')];
    }
    
    // А теперь проверяем, что валюта есть в сессии
    if (isset($this->session->data['currency']) && !empty($this->session->data['currency']))
    {
        // Получаем валюту
        $currency = $currencies[$this->session->data['currency']];
    }
}    
// Возвращаем результат
return $currency;
... 

Как видите, код "слегка" подрос.

Откуда возникают такие камни:

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

2. Во-вторых, практически все приходится проверять, будь то настройки конфигов или же наличие общих переменных в сессии, при этом значения функций нельзя проверять в "isset" и "empty", так что в коде появляется еще одна бесполезная строчка с "$temp_curr". Если вы этого не будете делать, то в некоторых редких ситуациях вы будете встречать "забавные" ошибки.

3. В-третьих, хотелось бы отдельно сказать по поводу сессионных данных. Возможно, это покажется странным, но общие сессионные переменные на то и общие сессионные, чтобы они заполнялись в любом случае. И это касается не только валюты, но настроек языков и прочего, но об этом в одной из последующих статей. Возвращаясь, так, например, если вы после очистки куков или зайдя из другого браузера сразу откроете админку, минуя заход на основной сайт, то "$this->session->data['currency']" ничего не вернет. Хотя, эта настройка должна быть, так как стандартные инструменты админки ее используют.

Примечание: Конечно, тут есть вопрос двоякости подхода к определению сессионных данных. Так как язык на сайте может быть выставлен один, а в админке использоваться тот, что по умолчанию. Но, тут есть свои нюансы...

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

1 1 1 1 1 1 1 1 1 1 Рейтинг 4.83 (3 Голосов)

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

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


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

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

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