Плагин «МОДУЛИ»
===============


ОПИСАНИЕ
--------
Для больших сайтов характерно выводить на главной (произвольной) странице различные блоки. Изначально мы не знаем какой именно функционал заключен в блоках - мы просто определяем их место в шаблоне. После этого мы сможем выбрать для каждого блока произвольный файл, текст или php-код.


В шаблонном modules.php определяем модули:

	modules_set(1, 'Первый модуль');
	

В самом шаблоне (например type-файле) выводим модуль:

	<?php if (function_exists('modules_out')) modules_out(1); ?>

Модуль имеет несколько настроек.
	- Название (определяется modules_set).
	- Имя файла - если он указан, то подключается require(файл). Сделать выпадающим списком: вначале смотрим php-файлы в каталоге modules шаблона, потом в modules плагина.
	- Текстовое textarea-поле, в котором можно указывать произвольный php-код.


Каждый _файл_ модуля может иметь свои опции. Для этого необходимо в подкаталоге /options/ создать файл с такми же именем и в нем прописать:

mso_admin_plugin_options('test_' . $module_id, 'modules', 
	array(
		'title' => array(
						'type' => 'text', 
						'name' => 'Название', 
						'description' => 'Описание', 
						'default' => 'нет'
					),
		),
	$module_name . ' ('. $module_id . ')', // титул
	'Укажите необходимые опции модуля.' // инфо
);

Где «test_» - ключ (лучше если совпадает с именем файла).

Доступны переменные
 	$module_id - номер модуля
 	$module_name - имя модуля

В данном случае мы формируем опцию test_ID.

Для считывания опций используем стандартную mso_get_option:

$options = mso_get_option('test_' . $module_id, 'modules', array());



ПРИМЕРЫ (ШАБЛОН)
----------------

Шаблонный modules.php
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

	modules_set(1, 'Первый модуль');
	
?>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Шаблонный index.php (часть кода):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	...
	if ( is_type('home') ) 		require('type/home-module.php');
	...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Шаблонный type/home-module.php
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

# начальная часть шаблона
require(getinfo('template_dir') . 'main-start.php');

echo NR . '<div class="type type_home">' . NR;

# Модули 
if (function_exists('modules_out')) modules_out(1);

echo NR . '</div><!-- class="type type_home" -->' . NR;

# конечная часть шаблона
require(getinfo('template_dir') . 'main-end.php');

?>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


ПРИМЕР МОДУЛЯ TEST
==================
Может находиться в каталоге шаблона или плагина:
- TEMPLATE_DIR/modules
- PLUGIN_DIR/modules


Файл test.php
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

	# доступны переменные
	# 	$module_id - номер модуля
	# 	$module_name - имя модуля
	
	$module_options = mso_get_option('test_' . $module_id, 'modules', array());
	if (isset($module_options['title'])) echo $module_options['title']; 

?>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Плагин использует опции. Для этого используется файл с тем же именем в подкаталоге options:
- TEMPLATE_DIR/modules/options
- PLUGIN_DIR/modules/options


Файл options/test.php
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

# доступны переменные
# 	$module_id - номер модуля
# 	$module_name - имя модуля

# ключ, тип, ключи массива
mso_admin_plugin_options('test_' . $module_id, 'modules', 
	array(
		'title' => array(
						'type' => 'text', 
						'name' => 'Название', 
						'description' => 'Описание', 
						'default' => 'нет'
					),
		),
	$module_name . ' ('. $module_id . ')', // титул
	'Укажите необходимые опции модуля.' // инфо
);

?>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

