Как работает конфигурация Opencart ($this->config->*)
Работает она очень просто. Если открыть загрузочный файл (index.php в корне), то увидим такой код:
// Config
$config = new Config();
$registry->set('config', $config);
// ...
// Store
if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {
$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
} else {
$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
}
if ($store_query->num_rows) {
$config->set('config_store_id', $store_query->row['store_id']);
} else {
$config->set('config_store_id', 0);
}
// Settings
$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC");
foreach ($query->rows as $setting) {
if (!$setting['serialized']) {
$config->set($setting['key'], $setting['value']);
} else {
$config->set($setting['key'], unserialize($setting['value']));
}
}
if (!$store_query->num_rows) {
$config->set('config_url', HTTP_SERVER);
$config->set('config_ssl', HTTPS_SERVER);
}
Что мы здесь видим? Сначала из бд делается выборка по таблице oc_store, затем id выбранного магазина заносится в конфиг с ключем config_store_id.
Ниже видим запрос выборки из таблички settings для выбранного ранее магазина. После запроса цикл, который устанавливает значения (при этом выполняя десирреализацию данных (см. функцию unserialize()).
Насчет выборки:
Здесь видим нужные нам поля - key и value. Собственно, в любом месте (контроллер, модель) мы можем вызвать:
$this->config->get('shipping_sort_order');
и получить в результате это значение:
Вот и все. И никаких хитростей...