OpenCart

Статья "Добавить свой модуль в боковую панель OpenCart (1 часть)"

В данной статье я расскажу о том, как правильно добавлять свои модули в боковую панель. Рассмотрим добавление своего модуля в левую колонку. Контроллер, который отвечает за вывод этой колонки - ControllerCommonColumnLeft. Он подключается почти в каждом контроллере страницы (
$this->children = array(
	'common/column_left',
	'common/column_right',
	'common/content_top',
	'common/content_bottom',
	'common/footer',
	'common/header'		
);
) и в ней выводится. Представление контроллера левой колонки содержит такой код: <pre class='code'> <?php if ($modules) { ?> <div id="column-left"> <?php foreach ($modules as $module) { ?> <?php echo $module; ?> <?php } ?> </div> <?php } ?> Как видим, если переменная $modules (она содержит скомпилированые представления модулей). установлена, то происходит цикличный вывод ее элементов. Откуда эти самые элементы беруться:
// в контроллере:
$extensions = $this->model_setting_extension->getExtensions('module');		

foreach ($extensions as $extension) {
	$modules = $this->config->get($extension['code'] . '_module');

	if ($modules) {
		foreach ($modules as $module) {
			if ($module['layout_id'] == $layout_id && $module['position'] == 'column_left' && $module['status']) {
				$module_data[] = array(
					'code'       => $extension['code'],
					'setting'    => $module,
					'sort_order' => $module['sort_order']
				);				
			}
		}
	}
}
Здесь мы видим, что расширения извлекаются с помощью модели Model_Setting_Extension. А внутри уже видим такой запрос:
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "extension WHERE `type` = '" . $this->db->escape($type) . "'");
Выборка из бд по такому запросу вернет следующий результат:
opencart extentions
Далее по каждому найденому модулю идет выборка настроек:
$modules = $this->config->get($extension['code'] . '_module');
А настройки у нас выбираются из бд с помощью компонента OpenCart - Config, из таблицы settings.

Например, для модуля banner по sql-запросу (
SELECT * 
FROM  `oc_setting` 
WHERE  `key` =  'banner_module'
) к бд будет найдено следующее:
Как видим, здесь информация содержится в сериализованом формате (см. php-функцию serialize()).

(пока что нет достаточно времени, допишу статью позже)