ГлавнаяДокументация • Модули

Модули

ajax — обработчик AJAX-запросов к сайту.

auth — авторизация пользователей.

block — простые блоки текста.

bread — строка навигации "хлебные крошки".

catalog — каталог.

error — страница ошибки.

file — модуль для загрузки файлов.

info — основной модуль для информационных разделов по типу новостных.

list — списки.

message — сообщения с сайта.

profile — профиль пользователя.

site_closed — страница "Сайт закрыт".

sitemap — модуль формирования карты сайта.

structure — отображает структуру сайта.

update — обновление CMS.

user — управление пользователями.

Общее описание работы модулей

Модули вызываются следующим образом:

module(string $module_name, string $module_template = '', array $module_option = [])

$module_name - имя модуля. Допустимые символы a-zA-Z0-9_-

$module_template - шаблон модуля. Допустимые символы a-zA-Z0-9_-

$module_option - массив настроек вызова. Логика определяется самим модулем.

При вызове модуля ядро читает файл init.php из папки модуля CORE/module/$module_name. Пример файла для модуля с одной таблицей:

<?php
if (!defined('MC2_CORE') || MC2_CORE !== true) {
	die('Access denied.');
}

// Настройки модуля
$module_info = [
	'table'			=> 'info',	// Имя таблицы, только a-zA-Z0-9_-
	'prefix'		=> 'n_',
	'title'			=> 'Инфо',
	'title_edit'	=> 'Редактирование новости',
	'items'			=> 12,		// Количество элементов на странице. 0 - все
	'uri'			=> 'info',	// корень раздела
	'folder'		=> 'info',  // папка по-умолчанию для файлов относительно /files
	'ajax_append'	=> true,
	'admin'			=> 'editor', // права админов через запятую ,
	'in_admin'      => true,  // показывать ли раздел в админке
];

// Структура таблицы
$module_db = [
	'id' => [
		'type' => 'int',
		'length' => 11,
		'auto_increment' => true,
		'primary_key' => true,
		'nullable' => false,
	],
	'date_time' => [
		'type' => 'datetime',
		'nullable' => false,
	],
	'title' => [
		'type' => 'varchar',
		'length' => 255,
		'nullable' => false,
	],
	'text' => [
		'type' => 'mediumtext',
		'nullable' => false,
	],
	...
];

// Описание формы
$module_form = [
	'id' => [
		'type' => 'hidden',
	],
	'status' => [
		'type' => 'checkbox',
		'label' => 'Статус',
		'label_text' => 'Активно',
		'col_left'  => 'col-4 col-lg-2',
		'col_right' => 'col-8 col-lg-10',
	],
	'date_time' => [
		'type'  => 'hidden',
		'label' => 'Дата и время',
	],
	'_date' => [
		'type'  => 'date',
		'label' => 'Дата',
		'col_left'  => 'col-4 col-lg-2',
		'col_right' => 'col-8 col-lg-10',
	],
	...
];

В файле могут находиться массивы:

Далее движок ищет такой же файл по пути шаблона TMPL/$module_name, затем TMPL/$module_name/$module_template, загружает из них те же переменные массивов и объединяет с имеющимися. Таким образом, переменные шаблона дополняют или переопределяют переменные модуля.

Если модуль требует несколько таблиц, то в init.php используется параметр tables. Пример init.php для модуля с несколькими таблицами:

<?php
if (!defined('MC2_CORE') || MC2_CORE !== true) {
	die('Access denied.');
}

// Настройки модуля
$module_info = [
	'tables'		=>	[ // не менять! внутренние id таблиц, НЕ названия. названия указываются в init_<id>.php
		'catalog',
		'element',
		'catalog_param',
		'element_param',
		'basket',
		'order',
		'order_items',
		'money',
	],
	'title'			=> 'Каталог',
	'uri'			=> 'catalog',	// корень раздела
	'folder'		=> 'catalog',	// папка по-умолчанию для файлов относительно /files
	'admin'			=> 'catalog',	// права админов через запятую ,
	'in_admin'      => true,  // показывать ли раздел в админке

];

Если указан ключ tables, то модуль может иметь сколько угодно таблиц и форм для их заполнения. Настройки для каждой таблицы находятся в файлах init_<id>.php, которые загружаются в том же порядке, что и основной init.php.

Если требуется изменить любой файл модуля, то его следует скопировать в папку TMPL/module_name или TMPL/module_name/module_template. Для поиска подходящего файла используется функция $module->path($file), которая возвращает наиболее приоритетный путь к нужному файлу, и этот путь уже можно использовать в include. В отличие от схемы дополнения массивов при загрузках файлов init.php, поиск остальных файлов модуля полностью переопределяет выполнение. Если есть нужный файл в папке шаблона, то файл в папке модуля с таким же именем не выполняется.

Для доступа к переменным модуля используются методы класса module. Внутри шаблонов модуля для этого используется экземпляр класса $module. Пример обращения к массиву info, элементу title:

echo '<h1>' . $module->info('title') . '</h1>';

Класс module

Private переменные содержат информацию о модуле и его настройках. Доступ к ним осуществляется через методы класса.

private $name = '';
private $template = '';
private $option = [];
private $info = [];
private $db = [];
private $form = [];
private $table = [];
private $ret = null;

Доступные публичные методы класса:

init(string $_name, string $_template, array $_option)

Инициализирует модуль. Читает файлы конфигурации init.php, определят права доступа пользователя.

После чтения всех файлов конфигурации модуля, некоторые переменные (если они существуют) проходят валидацию:

info($param = '')

Возвращает информацию о параметрах модуля.

Если не указана $param, то возвращается весь массив.

Если указана $param, то только значение указанной переменной $info[$param]. Если такая переменная не найдена, возвращается пустая строка.

set_info(array $value)

Обновляет весь массив $info.

set_info_item(string $key, $value)

Обновляет элемент массива $info.

del_info_item(string $key)

Удаляет элемент $info[$key].

db()

Возвращает массив $db.

set_db(array $value)

Обновляет весь массив $db.

form(string $item = '', string $param = '')

Возвращает информацию о форме редактирования.

Если не указаны $item и $param, то возвращается весь массив form.

Если указана $item, то только значение указанной переменной $form[$item].

Если указана $param, то значение $form[$item][$param].

set_form(array $value)

Обновляет весь массив $form.

set_form_item(string $key, array $value)

Обновляет значение указанной переменной $form[$key].

set_form_param(string $key, string $param, $value)

Обновляет значение указанной переменной $form[$key][$param].

del_form_item(string $key)

Удаляет массив $form[$key] из формы.

table($param)

Возвращает объект для указанной таблицы.

Аналоги методов для модуля с несколькими таблицами:

table_info($table, $param = '')

table_form($table, string $item = '', string $param = '')

Работают точно так же, как info() и form(), только первым параметром нужно указать ключ таблицы.

name()

Возвращает текущее имя модуля.

template()

Возвращает текущее имя шаблона модуля.

option($param = '')

Возвращает информацию о настройках вызова модуля.

Если не указана $param, то возвращается весь массив.

Если указана $param, то только значение указанной настройки $option[$param]. Если такая настройка не найдена, возвращается пустая строка.

path(string $file): string

Возвращает путь до подходящего файла шаблона модуля по принципу:

Далее этот путь можно использовать в include.

Этот принцип позволяет заменять в папке шаблона любые файлы модуля своими. Если нужный файл в шаблоне отсутствует, то используется стандартный файл модуля.

Пример использования:

$info_items = 0;
$filePath = $module->path('list_item.php');
if ($filePath) {
	foreach ($items as $item) {
		$item = row2item($item, $module->info('prefix'));
		include $filePath;
		$info_items++;
	}
}

fields(array $data = [], $obj = null): array

Генерирует и возвращает массив для HTML-формы.

Если не указан $obj, то используется схема для модуля с одной таблицей.

Если указан $obj, то используются данные для модуля с множественными таблицами.

set_return($value)

Устанавливает значение, которое модуль должен вернуть после завершения.

get_return()

Получает значение, которое модуль должен вернуть после завершения.

Public static методы класса:

module::module_load_init($name, $template = '', $init_file = 'init.php'): array

Загружает произвольный файл конфигурации модуля по тому же принципу, что и основной метод init(), заполняет только переменную $module_info и возвращает её. Можно вызывать из любого места с целью узнать конфигурацию произвольного модуля.

module::db_sync($db_array, $tableName, $fieldPrefix)

Синхронизирует структуру таблицы init файла с базой данных.

module::module_path($moduleName, $moduleTemplate, $file): string

То же самое, что и $module->path(string $file), только с возможность вызвать статично, указав имя модуля и шаблона.

module::info_validate($info): array

Валидирует некоторые переменные массива $info. Возвращает исправленный массив.