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


ОПИСАНИЕ
--------
Для больших сайтов характерно выводить на главной (произвольной) странице
различные блоки. Изначально мы не знаем какой именно функционал заключен в
блоках - мы просто определяем их место в шаблоне. После этого мы сможем выбрать
для каждого блока произвольный файл, текст или 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 . ')', // титул
	'Укажите необходимые опции модуля.' // инфо
);

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

