Модули:Модуль системы администрирования

Материал из Booot

Перейти к: навигация, поиск

Модули системы администрирования хранятся в каталоге

/admin/modules/

Имя файла должно соответствовать имени класса данного модуля, объявляемый класс является расширением класса AdminModule.

Содержание

Структура модуля

class NewModule extends AdminModule { 
	
	const name = 'Имя модуля';
	
	const order = 1;
	
	function Info() {
		$this->title = 'Новый модуль';
		$this->content = 'Whatever you want';
		$this->hint = array(
			'title' => 'А вы знаете что',
			'text' => 'Это новый модуль и он несет счастье людям'
		);
	}
}

name — Константа, задает имя модуля в списке модулей
order — Константа, определяет очередность вывода модулей в списке, значение 0 скрывает модуль
Info() — Метод вызываемый по-умолчанию
$this->title — Переменная, содержимое которой будет выведено в заголовке
$this->content — Переменная, содержимое которой будет выведено в содержании страницы
$this->hint['title'] — Переменная, содержимое которой будет выведено в заголовке вспомогательного блока
$this->hint['text'] — Переменная, содержимое которой будет выведено в содержании вспомогательного блока

Вспомогательные методы из AdminModule

Методы существенно упрощающие все стандартные операции по созданию модулей.

Получение ссылки в системе администрирования

GetLink($method="", $data=array(), $module="")

Все параметры опциональны, если они не заданы, то ссылка будет на модуль и метод где была вызвана GetLink.
$method — На какой метод отдать ссылку в текущем модуле
$data — Дополнительные параметры в ссылке (GET запроса). Ассоциированный одноуровневый массив
$module — На какой модуль отдать ссылку

Создание простой таблицы с данными

DataTable($table, $options=array(), $fields=array(), $where="", $order="")

Создает таблицу примерно такого вида

BoootDataTable.png

$table — Имя таблицы в mysql без префикса
$options — Объявление системных полей, контролов и табов
$fields — Поля и их свойства
$where — Уточнение выборки для таблицы
$order — Задание сортировки по-умолчанию

Пример

$this->content = $this->DataTable(
	'products',
	array(
		//Имена системных полей
		'nouns'	=> array(
			'id'		=> 'id',	// INT
			'name'		=> 'name',	// VARCHAR
			'order'		=> 'order',	// INT
			'deleted'	=> 'deleted',	// ENUM(Y,N)
			'created'	=> 'created',	// DATETIME
			'modified'	=> 'modified',	// DATETIME
			'text'		=> 'text',	// TEXT
			'image'		=> true
		),
		//Отображение контролов
		'controls' => array(
			'add',
			'edit',
			'del'
		),
		//Табы (методы этого класса)
		'tabs'	=> array(
			'Images'	=> 'Изображения',
			'Types'		=> 'Характеристики',
			'Media'		=> 'Медиа/Файлы'
		)
	),
	array(
		'id' 		=> array('name' => '№', 'class' => 'min'),
		'name'		=> array('name' => 'Наименование', 'length'=>'1-128'),
		'brand_name'	=> array('name' => 'Бренд', 'length'=>'0-128', 'autocomplete' => 'this'),
		'supplier_name'	=> array('name' => 'Поставщик', 'length'=>'1-128', 'autocomplete' => array('LEGO', 'Кроха', 'Московский диллер')),
		'price'		=> array(
			'name' => 'Цена',
			'length'=>'1-16',
			'regex'=>'/^[0-9]*\.?[0-9]*$/i',
			'regex_error'=>'Цена может быть только числовой и положительной',
			'default'=>0
		),
		'anons'		=> array('name' => 'Анонс товара', 'hide_from_table'=>true),
		'show'		=> array('name' => 'Показывать', 'class'=>'min'),
		'is_action'	=> array('name' => 'Акция', 'class'=>'min',
			'transform' => function($str){
				if($str == 'Y') return 'Да';
				elseif($str == 'N') return 'Нет';
				else return $str;
			}
		),
		'is_featured'	=> array('name' => 'Рекомендуемый', 'class'=>'min', 'transform'=>'YesNo'),
		'order'		=> array('name' => 'Порядок', 'class'=>'min'),
		'relations'	=> array('name' => 'Зависимые товары (№(id) через запятую)', 'length'=>'0-255', 'hide_from_table'=>true),
		'top'		=> array(
			'name'		=> 'Раздел',
			'default'	=> $_GET['top'],
			'select'	=> array(
				//Обязательные
				'table'		=> 'content',
				'name'		=> 'name',
				//Необязательные
				'id'		=> 'id',
				'order'		=> 'order',
				'allow_null'=> true,
				'top'		=> 'top'
			)
		)
	),
	'`top` = '.(int)$_GET['top']
);

nouns — Имена всех системных полей, если они есть их нужно указать, в примере перечислены все доступные
controls

tabs — Указание методов для отображения во вкладках и имен вкладок
Опции поля таблицы, ключами являются имена полей:

Создание таблицы с большим массивом данных

DataTableAdvanced($table, $options=array(), $fields=array(), $where="", $order="")

Создает таблицу примерно такого вида

BoootDataTableAdvanced.png

Входящие параметры идентичны DataTable

Создание дерева разделов

DataTree($table, $options, $fields)

Создает дерево разделов такого вида

BoootDataTree.png

Входящие параметры схожи с DataTable, отличия:

controls

'list' => $this->GetLink().'&top={id}'

Дополнительная секция inner (связанная подтаблица)

'table'		=> 'products',	//Имя таблицы
'top_key'	=> 'top',	//Ключ соответствия категории товарам
'deleted'	=> 'deleted'	//Поле «удалено»

Пример

$this->content = $this->DataTree(
	'products_topics',
	array(
		//Имена системных полей
		'nouns'	=> array(
			'id'		=> 'id',	// INT
			'name'		=> 'name',	// VARCHAR
			'order'		=> 'order',	// INT
			'deleted'	=> 'deleted',	// ENUM(Y,N)
			'created'	=> 'created',	// DATETIME
			'modified'	=> 'modified',	// DATETIME
			'text'		=> 'text',	// TEXT
			'top'		=> 'top',
			'image'		=> true
					),
		//Отображение контролов
		'controls' => array(
			'add_root',
			'add_sub',
			'edit',
			'list' => $this->GetLink().'&top={id}',
			'del'
		),
		//Зависимая таблица (напрмер товары или новости по рубрикам)
		'inner'	=> array(
			'table'		=> 'products',	//Имя таблицы
			'top_key'	=> 'top',	//Ключ соответствия категории товарам
			'deleted'	=> 'deleted'	//Поле «удалено»
		),
		//Табы (методы этого класса)
		'tabs'	=> array(
			'TypesTopic'	=> 'Задать характеристики'
		)
	),
	array(
		'id' 		=> array('name' => '№', 'class' => 'min'),
		'name'		=> array('name' => 'Наименование', 'length'=>'1-128', 'link'=>$this->GetLink().'&top={id}'),
		'nav'		=> array(
			'name' => 'URI ссылка', 
			'length'=>'0-32', 
			'regex'=>'/^([a-z0-9-_]+)?$/i', 
			'regex_error' => 'URI ссылка может быть только из цифр, латинских букв и дефиса', 
			'if_empty_make_uri' => 'name'
		),
		'order'		=> array('name' => 'Порядок', 'class'=>'min')
	)
);

Создание табов (вкладок)

Общий вид табов

BoootTabs.png

Для задания табов необходимо объявить их в секции tabs любой из функций: DataTable, DataTableAdvanced, DataTree

Ключом является имя метода вызываемого при открытии таба, а значением — отображаемое имя этого таба, например:

'tabs'	=> array(
	'Images'	=> 'Изображения',
	'Types'		=> 'Характеристики',
	'Media'		=> 'Медиа/Файлы'
)

Рекомендуемый шаблон метода для таба (метод нужно писать в том же классе где он и объявлен, т.е. в текущем модуле):

function Images() {
	$id = (int)(isset($_REQUEST['id'])?$_REQUEST['id']:0);
	if($id == 0) {
		echo 'Сначала создайте запись';
		exit();
	}
	
	//Здесь ваш код
	//Который что-то делает и передает переменные в шаблон
	//Если вы суровый и из Челябинска, то можно обойтись и без шаблона
	//Просто echo и exit
	
	echo tpl('modules/'.__CLASS__.'/'.__FUNCTION__, array(
		'link'		=> $this->GetLink(),
		'module_id'	=> $id
	));
	exit();
}
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты