Документация по MobileCMS
Структура модулей и их разработка

## Введение

Модули в MobileCMS состоят из 4х основных частей:

- Файл module.ini - содержит важную информацию о модуле
- Папка controllers - содержит контроллеры модуля
- Папка views - содержит шаблоны модуля
- Папка helpers - содержит хелперы (помощники) модуля

Также модули могут содержать и другие необходимые для работы файлы и папки.
Рассмотрим структуру модулей более подробно на примере тестового модуля.

## module.ini

Файл module.ini содержит важную информацию о модуле, необходимую для его установки. Основные компоненты файла:

- name - название модуля, в названии могут быть только латинские буквы, цифры и знаки подчеркивания, например, test (обязательный пареметр)
- title - отображаемое имя модуля, например, Тест (обязательный пареметр)
- admin_link - ссылка на управление модулем в панеле управления, формат как для первого параметра функции a_url() (сегменты ссылки), например, test/admin (не обязательный пареметр, используется только если есть управление модулем из панели управления)
- description - краткое описание модуля, например, Тестовый модуль (не обязательный пареметр)
- author - автор модуля, например, Ant0ha (не обязательный пареметр)
- version - версия модуля, например, 0.1 (не обязательный пареметр)

Пример module.ini:

    name = "test"
    title = "Тест"
    admin_link = "test/admin"
    description = "Тестовый модуль"
    author = "Ant0ha"
    version = "0.1"

## controllers

Папка controllers содержит контроллеры модуля. Контроллер - это основная часть модуля, где выполняется логика скрипта.
Рассмотрим примеры простых контроллеров тестового модуля.
Файл controllers/test.php

    <?php
    /**
    * Контроллеры модулей происходят от класса Controller.
    * Название контроллера происходит от названия модуля с большой буквы с окончанием _Controller
    */
    class Test_Controller extends Controller {
    	/**
    	* Доступ к контроллеру (укажем 0 чтобы разрешить доступ каждому пользователю)
    	*/
    	public $access_level = 0;

    	/**
    	* Метод вызываемый по умолчанию
    	*/
    	public function action_index() {
    		# Вызовем главный и единственный метод нашего контроллера
    		$this->action_hello_world();
    	}

    	/**
    	* Метод выводит "Hello world!"
    	*/
    	public function action_hello_world() {
    		# Ассигнуем переменную для теста модуля
    		$this->tpl->assign(array(
    			'hello' => "Hello world!"
    		));

    		# Подключаем шаблон нашего метода, шаблон приведен ниже, в описании views
    		# Будет подключен файл modules/test/views/default/hello_world.tpl
    		$this->tpl->display('hello_world');
    	}
    }
    ?>

Так выглядит простой контроллер нашего тестового модуля, показыающий всем фразу "Hello world!", теперь расмотрим самый простой контроллер нашего модуля для панели управления.
Файл controllers/test_admin.php

    <?php
    class Test_Admin_Controller extends Controller {
    	/**
    	* В доступе к контроллеру пропишем 10, т.е. он доступен только админам сайта.
    	* Чтобы разрешить доступ и модерам, можно будет прописать 8.
    	*/
    	public $access_level = 10;
    	/**
    	* Тема, используемая в контроллере, для админки необходимо указать "admin"
    	*/
    	public $template_theme = 'admin';

    	/**
    	* Метод вызываемый по умолчанию
    	*/
    	public function action_index() {
    		# Вызовем главный и единственный метод нашего контроллера
    		$this->action_hello_admin();
    	}

    	/**
    	* Метод выводит "Hello Admin!"
    	*/
    	public function action_hello_admin() {
    		# Ассигнуем переменную для теста модуля
    		$this->tpl->assign(array(
    			'hello' => "Hello Admin!"
    		));

    		# Подключаем шаблон нашего метода, шаблон приведен ниже, в описании views
    		# Будет подключен файл modules/test/views/admin/hello_admin.tpl
    		$this->tpl->display('hello_admin');
    	}
    }
    ?>

## helpers

Папка helpers содержит хелперы (помощники) модуля. Это служебные php файлы, помогающие в работе модуля.
Обычно в helpers модуля присутствуют 2 хелпера - инсталлер и виджет, рассмотрим их более детально.
Файл helpers/test_installer.php (название файла состоит из названия модуля и окончания _installer.php) предназначен для выполнения каких-либо действий во время установки и деинсталляции модуля, если никаких действий не требуется, то этот файл не обязателен.

    <?php
    /**
    * Название класса инсталлятора также состоит из названия модуля и окончания _installer
    */
    class test_installer {
    	/**
    	* Метод для установки модуля
    	*/
    	public static function install(&$db) {
    		# Создадим таблицу a_test, якобы нужную нашему модулю test
    		$db->query("CREATE TABLE`a_test` (
    			`item_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    			`item` VARCHAR( 30 ) NOT NULL
    			) ENGINE = MYISAM ;
    		");
    	}

    	/**
    	* Метод для удаления модуля
    	*/
    	public static function uninstall(&$db) {
    		$db->query("DROP TABLE a_test");
    	}
    }
    >

В инсталляторе можно не только создавать/удалять таблицы, но так же и создавать/удалять файлы и папки, добавлять правила роутинга, события и т.д.
Файл helpers/test_widget.php (название файла состоит из названия модуля и окончания _widget.php) предназначен для вывода какой-либо информации на главную страницу сайта.

    <?php
    /**
    * Название класса виджета также состоит из названия модуля и окончания _widget
    */
    class test_widget {
    	/**
    	* Показ виджета
    	*/
    	public static function display($widget_id) {
      		return 'Это виджет тестового модуля<br />';
    	}

    	/**
    	* Настройка виджета
    	*/
    	public static function setup($widget) {
    		a_notice('Данный виджет не требует настройки', a_url('index_page/admin'));
    	}
    }
    >

Виджет может быть намного сложнее, выводить динамическую информацию и иметь более сложные настройки, для примера можете посмотреть виджет модуля загрузок в modules/downloads/helpers/downloads_widget.php вашей копии MobileCMS
Также хелперы модулей могут (и это очень рекомендуется) содержать частоиспользуемые методы (функции) в модуле, для примера взгляните хелпер модуля смайлов modules/smiles/helpers/smiles.php

Пред | На уровень выше | След
Главные методы ядра | Содержание | Методы модуля main