Инсталляция
Для того чтобы модуль мог быть установлен опционально, создается файл
инсталляции модуля. Это файл modules/модуль/модуль.install.php. В нем должен быть определен класс Модуль_install, который наследует класс Install.
Файл инсталляции используется при установке DIAFAN.CMS, при установке / удалении модуля из административной части, при восстановлении базы данных из административной части.
Свойства
var is_core = false 
 – модуль является частью ядра.
Пример:
// modules/site/site.install.php
public $is_core = true;
var module 
 – название текущего модуля.
Свойство заполняется автоматически при инициации установки модуля и содержит название модуля.
Пример:
При удалении модуля удаляется папка загружаемых файлов модуля. Название модуля получаем из свойства module, так как функционал в includes/install.php общий для всех модулей.
// includes/install.php функция uninstall()
if(is_dir(ABSOLUTE_PATH.USERFILES.'/'.$this->module))
{
    File::delete_dir(USERFILES.'/'.$this->module);
}
Пример:
// modules/users/users.install.php
public $title = "Пользователи";
var install_modules 
 – установленные/устанавливаемые модули.
Содержит массив со всеми установленными или устанавливаемыми в текущий момент модулями. Используется, например, для заполнения примеров в модулях, которые связаны с другими модулями.
Пример:
При созаднии модуля создаем папку shop в папке модуля, если модуль «Магазин» тоже устанавливается.
// modules/my/my.install.php функция action()
if(in_array('shop', $this->install_modules))
{
    File::create_dir(USERFILES.'/my/shop');
}
var langs 
 – идентификаторы языков сайта.
Содержит массив идентификаторов языков сайта на момент установки модуля.
Пример:
При создании модуля добавляем изображение печати из демо-данных для каждого языка сайта.
// modules/my/my.install.php функция action()
foreach($this->langs as $lang_id)
{
    File::copy_file(DEMO_PATH.'my/stamp'.$lang_id.'.png', USERFILES.'/my/stamp'.$lang_id.'.png');
}
var tables = array() 
 – таблицы в базе данных.
Формат:
public $tables = array(
    array(
        "name" => "название_таблицы",
        // поля таблицы
        "fields" => array(
            array(
                // пример: id
                "name" => "название_поля",
                // пример: INT(11) UNSIGNED NOT NULL AUTO_INCREMENT
                "type" => "описание_поля",
                // поле переводится на другие языки (true|false)
                "multilang" => true,
                // комментарий виден из админера базы данных
                "comment" => "комментарий к полю",
            ),
            ...
        ),
        // ключи таблицы
        "keys" => array(
            // пример PRIMARY KEY (id) или KEY site_id (`site_id`)
            "описание_ключа",
            ...
        ),
        // комментарий виден из админера базы данных
        "comment" => "комментарий к таблице",
    ),
    ...
);
Пример:
Создаем таблицу категорий при установке модуля «Новости».
public $tables = array(
    array(
        "name" => "news_category",
        "comment" => "Категории новостей",
        "fields" => array(
            array(
                "name" => "id",
                "type" => "INT(11) UNSIGNED NOT NULL AUTO_INCREMENT",
                "comment" => "идентификатор",
            ),
            array(
                "name" => "name",
                "type" => "TEXT",
                "comment" => "название",
                "multilang" => true,
            ),
            array(
                "name" => "act",
                "type" => "ENUM('0', '1') NOT NULL DEFAULT '0'",
                "comment" => "показывать на сайте: 0 - нет, 1 - да",
                "multilang" => true,
            ),
            array(
                "name" => "site_id",
                "type" => "INT(11) UNSIGNED NOT NULL DEFAULT '0'",
                "comment" => "идентификатор страницы сайта из таблицы {site}",
            ),
            array(
                "name" => "text",
                "type" => "TEXT",
                "comment" => "описание",
                "multilang" => true,
            ),
            array(
                "name" => "trash",
                "type" => "ENUM('0', '1') NOT NULL DEFAULT '0'",
                "comment" => "запись удалена в корзину: 0 - нет, 1 - да",
            ),
        ),
        "keys" => array(
            "PRIMARY KEY (id)",
            "KEY site_id (site_id)",
        ),
    )
);
Все таблицы модуля должны начинаться с названия модуля.
Пример:
Таблицы модуля «Новости» – {news}, {news_category} и т. д.var modules = array() 
 – записи в таблице {modules}.
При установке модуля обязательно нужно сделать запись в таблице {modules}, чтобы система определила модуль как установленный.
Формат:
public $modules = array(
    array(
        // пример: cart
        "name" => "название_подмодуля",
        // имеет административную часть (true|false)
        "admin" => true,
        // имеет пользовательскую часть (true|false)
        "site" => true,
        // можно прикрепить к странице сайта (true|false)
        "site_page" => true,
        // пример: Корзина товаров
        // можно опустить, если запись name равна названию основного модуля
        "title" => "название_модуля_на_русском",
    ),
);
Пример:
Запись в таблице {modules} для модуля «Файловый архив».
// modules/files/files.install.php
public $modules = array(
    array(
        "name" => "files",
        "admin" => true,
        "site" => true,
        "site_page" => true,
    ),
);
var admin = array() 
 – меню административной части.
Формат:
public $admin = array(
    array(
        "name" => "название",
        "rewrite" => "ЧПУ",
        "group_id" => "номер_группы",
        "sort" => "порядковый_номер_для_сортировки",
        // показывать в меню (true|false)
        "act" => true,
        "docs" => "ссылка на документацию",
        // вложенные страницы
        "children" => array(
            array(
                "name" => "название",
                "rewrite" => "ЧПУ",
                "sort" => "порядковый_номер_для_сортировки",
                // показывать в меню (true|false)
                "act" => true,
            ),
        )
    ),
    ...
);
Пример:
Создаем страницы управления модулем «Обратная связь».
// modules/feedback/feedback.install.php
public $admin = array(
    array(
        "name" => "Обратная связь",
        "rewrite" => "feedback",
        "group_id" => 2,
        "sort" => 19,
        "act" => true,
        "docs" => "http://www.diafan.ru/moduli/obratnaya_svyaz/",
        "children" => array(
            array(
                "name" => "Сообщения",
                "rewrite" => "feedback",
                "act" => true,
            ),
            array(
                "name" => "Конструктор формы",
                "rewrite" => "feedback/param",
                "act" => true,
            ),
            array(
                "name" => "Настройки",
                "rewrite" => "feedback/config",
            ),
        )
    ),
);
var site = array() 
 – страницы сайта.
Формат:
public $site = array(
    array(
        // пример: Каталог товаров, Shop
        "name" => array("название_на_русском", "название_на_английском"),
        // пример: 15 – необязательный параметр
        "sort" => "порядковый_номер_для_сортировки",
        // пример: shop – необязательный параметр
        "module_name" => "прикрепленный_модуль",
        // пример: catalog-tovarov
        "rewrite" => "ЧПУ",
        // пример: sitemap.php – необязательный параметр
        "theme" => "шаблон_страницы",
        // не показывать на карте сайта (true|false)
        "map_no_show" => true,
        // не индексировать (true|false)
        "noindex" => true,
        // не участвует в поисковой выдаче (true|false)
        "search_no_show" => true,
        // ссылки в меню – необязательный параметр
        "menu" => "номер_категории_меню",
    ),
    ...
);
Пример:
Создаем страницу сайта «Обратная связь» при установке модуля.
// modules/feedback/feedback.install.php
public $site = array(
    array(
        "parent_id" => 4,
        "name" => array('Обратная связь', 'Feedback'),
        "act" => true,
        "module_name" => "feedback",
        "rewrite" => "feedback",
        "menu" => 1,
    ),
);
var inserts = array() 
 – вставки.
var config = array() 
 – настройки.
Формат:
public $config = array(
    array(
        "name" => "название",
        // по умолчанию, текущий модуль
        "module_name" => "название_модуля",
        // если значение переводятся на разные языки, то можно задать в виде массива
        "value" => "значение",
    ),
);
Пример:
В магазине отмечаем настройку «Использовать категории» при установке.
// modules/shop/shop.install.php
public $config = array(
    array(
        "name" => "cat",
        "value" => "1",
    )
);
var sql = array() 
 – предустановленные данные.
Заполняется, если при установке модуля нужно вставить начальные или обязательные данные в таблицы базы данных модуля.
Формат:
public $sql = array(
    "название_таблицы" => array(
        array(
            "поле" => "значение",
            "поле2" => "значение2",
        ),
        array(
            "поле" => "значение",
            "поле2" => "значение2",
        ),
    ),
    "название_таблицы2" => array(
        ...
    ),
    ...
);
Пример:
В модуле «Меню» создаем предустановленные категории.
// modules/menu/menu.install.php
public $sql = array(
    "menu_category" => array(
        array(
            'id' => 1,
            'name' => array('Меню верхнее', 'Top menu'),
            'current_link' => '1',
            'show_all_level' => '1',
        ),
        array(
            'id' => 2,
            'name' => array('Меню интернет-магазин', 'Shop menu'),
        ),
    ),
);
var demo = array() 
 – демо-данные.
Формат тот же, что у предыдущего свойства. Но данные заполняются только в том случае, если отмечена опция «Заполнить сайт примерами из демо-версии».
Пример:
В модуле «Новости» добавляем категорию для демонстрации возможностей модуля.
// modules/news/news.install.php
public $demo = array(
    'news_category' => array(
        array(
            'id' => 1,
            'name' => array('Новости компании', 'Company news'),
            'rewrite' => 'news/novosti-kompanii',
        )
    )
);
Методы
void start (boolean $demo) 
 – Устанавливаем модуль.
- boolean $demo: установить демо-данные
 
Пример:
// устанавливаем модуль «Новости»
include_once(ABSOLUTE_PATH.'modules/news/news.install.php');
$module = News_install($this->diafan);
$module->start(true);
void action () 
 – Выполняет действия при установке модуля.
Функция может быть определена, если перед установкой нужно совершить действия, невыполняемые в стандартной логике установки.
Пример:
В модуле «Языки сайта» дополнительный язык добавляется, если отмечена опция «Создать две языковые версии сайта».
// modules/languages/languages.install.php
protected function action()
{
    if (count($this->langs) > 1)
    {
        $this->sql["languages"][] =
        array(
            "id" => 2,
            "name" => 'eng',
            "shortname" => 'eng',
        );
    }
}
void action_post () 
 – Выполняет действия при установке модуля после основной установки.
Функция может быть определена, если нужно выполнить набор действий после установки всех модулей.
Пример:
В модуле «Поиск по сайту» нужно проиндексировать контент всех модулей.
// modules/search/search.install.php
public function action_post()
{
    $this->diafan->_search->index_all();
}
void tables ([array $array = array()]) 
 – Добавляет таблицы.
- array $array: таблицы
 
void modules ([array $array = array()]) 
 – Добавляет запись в таблицу {modules}.
- array $array: массив с данными
 
void admin ([array $array = array()], [integer $parent_id = 0], [array $parent = array()]) 
 – Добавляет записи о модуле в таблицу {admin} - страницы админки.
- array $array: массив с данными
 - integer $parent_id: номер страницы админки - родителя
 - array $parent: значения полей для родителя
 
void site ([array $rows = array()]) 
 – Добавляет страницы сайта.
- array $rows: массив с данными
 
void config ([array $array = array()]) 
 – Добавляет запись в таблицу {config}.
- array $array: массив с данными
 
void inserts ([array $array = array()]) 
 – Добавляет запись в таблицу {inserts}.
- array $array: массив с данными
 
void sql ([array $array = array()]) 
 – Выполняет SQL-запросы.
- array $array: массив с данными
 
void demo () 
 – Установка demo-данных.
void uninstall_demo () 
 – Удаление demo-данных.
void uninstall_demo_action () 
 – Выполняет действия при удалении demo-данных.
void uninstall () 
 – Удаляет модуль.
void uninstall_action () 
 – Выполняет действия при удалении модуля.
Функция может быть определена, если нужно выполнить набор действий после удаления модуля.
Пример:
В модуле «Интернет магазин» нужно удалить создаваемую страницу «Заказ оформлен», к которой модуль не подключен.
// modules/shop/shop.install.php
protected function uninstall_action()
{
    DB::query("DELETE FROM {rewrite} WHERE rewrite='shop/cart/done'");
    DB::query("DELETE FROM {site} WHERE [name]='Заказ оформлен'");
}
База знаний
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.

Ваш комментарий будет первым.