6 сентября 2013 г.

Часто бывает, когда в том или ином решении требуется получить текущие значения ключевых переменных OpenCart. Все эти значения пользуются большим спросом у разработчиков, они известны, но иногда забываешь их способ получения. Поэтому решено составить соответствующий список в виде вопросов и ответов.

Как узнать текущий язык магазина?


Идентификатор текущего языка (целое число):
$current_language_id = $config->get('config_language_id');

Код текущего языка (двухсимвольный):
$current_language_code = $this->config->get('config_language');
или
$current_language_code = $this->language->get('code');

Как определить выбранную валюту?

Код текущей валюты (трехсимвольный):
$current_currency_code = $this->currency->getCode();

В какой категории находится просматриваемый товар?

Довольно актуально, если страница товара открыта по прямой ссылке, т.е. не через категории. Идентификатор текущей категории (ноль будет означать, что пользователь в разделе, не связанном с категорией, например на главной странице):

$parts = array(0);
if (isset($this->request->get['path'])) {
$parts = explode('_', (string)$this->request->get['path']);
} elseif (isset($this->request->get['product_id'])) {
if ($rows = $this->model_catalog_category->getCategoriesByProductId($this->request->get['product_id'])) {
$parts = array_values($rows[0]);
}
}
$current_category_id = (int)array_pop($parts);

Как узнать идентификатор действующего магазина?

$current_store_id = $this->config->get('config_store_id');

Какой шаблон используется для магазина?

$current_template = $this->config->get('config_template');

Как определить текущего пользователя?

Если требуется получить имя авторизованного пользователя в панели управления OpenCart и его идентификатор:

$this->load->library('user'); $user_data = new User($this->registry);
$current_username = $user_data->getUserName();
$current_user_id = $user_data->getId();

Для идентификатора бывает достаточно узнать значение одной из переменных сессии (ноль будет означать, что пользователь не авторизован):
$current_user_id = isset($this->session->data['user_id']) ?  $this->session->data['user_id'] : 0;

Как определить авторизованного покупателя?

Аналогично вопросу выше, только имя подключаемой библиотеки customer, а идентификатор покупателя в сессии customer_id.

Как узнать содержимое переменной в процессе отладки?

Иногда в процессе отладки необходимо знать значения тех или иных переменных. Поскольку выводить содержимое переменной в браузер не всегда удобно, а в некоторых случаях и невозможно, то лучше это делать путём записи в журнал ошибок OpenCart:

$this->log->write($variable);

Как добавить скриптовый файл JavaScript или файл стилей CSS?

Файлы скриптов и стилей лучше подключать по мере их необходимости, вместо того, чтобы прописывать в шаблонах типа header.tpl. Это ускоряет процесс окончательной загрузки тех страниц, где они не используются:

 $this->document->addStyle('catalog/view/theme/default/stylesheet/style.css');
 $this->document->addScript('catalog/view/javascript/script.js');

Как узнать количество товаров в корзине без выполнения запроса к серверу?

Очевидно это можно сделать только через интерфейс магазина средствами jQuery. Разумеется решение справедливо для стандартной версии OpenCart, где модуль корзины покупок выполнен по всем правилам.

<script type="text/javascript">var cart_total = $('#cart-total').text().replace( /^\D+/g, ''); if (parseInt(cart_total)) { alert('Cart is not empty'); }</script>

Как узнать текущую страницу (layout)?

Многие переменные можно брать непосредственно из параметров запроса типа GET. Чтобы получить текущую страницу (схему), используйте следующую запись:

$route = $this->request->get['route'];

Как узнать ведущий контроллер?

Этот блок кода необходим, если требуется знать тому или иному модулю под каким контроллером он был запущен. Актуально для второго решения из темы по расширению возможностей работы модулей в OpenCart 1.5+.

$controller_class_name = 'Controller';
$route_data = explode('/', $this->request->get['route']);
foreach ($route_data as $path) {
   $controller_class_name .= ucfirst($path);
}
if (class_exists($controller_class_name)) {
   // Do stuff...
}

Как узнать ведущий раздел, административный или клиентский?

Есть модули, которые работают и в административном разделе и клиентском, т.е. на витрине. Кроме того, библиотеки OpenCart общие для этих двух разделов. Как же узнать, что в текущий момент код выполняется в одном из разделов? Для этого достаточно условия проверки существования константы HTTP_CATALOG или if (defined('HTTP_CATALOG')) { //Admin Area... } else { //Customer Area... }

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

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

  1. Ошибка
    не $current_user_id = $user_data->getUserName();
    а $current_user_id = $user_data->getId();

    ОтветитьУдалить

  • RSS
  • Twitter
  • Youtube