Наверх

Инсталляция

Для того чтобы модуль мог быть установлен опционально, создается файл инсталляции модуля. Это файл modules/модуль/модуль.install.php. В нем должен быть определен класс Модуль_install, который наследует класс Install.

Файл инсталляции используется при установке DIAFAN.CMS, при установке / удалении модуля из административной части, при восстановлении базы данных из административной части.

Свойства

var is_core = false – модуль является частью ядра.

Пример:

// modules/site/site.install.php
public $is_core = true;

var module – название текущиего модуля.

Свойство заполняется автоматически при инициации установки модуля и содержит название модуля.

var title – название.

Пример:

// modules/users/users.install.php
public $title = "Пользователи";

var install_modules – установленные/устанавливаемые модули.

Содержит массив со всеми установленными или устанавливаемыми в текущий момент модулями. Используется, например, для заполнения примеров в модулях, которые связаны с другими модулями.

var langs – идентификаторы языков сайта.

Содержит массив идентификаторов языков сайта на момент установки модуля.

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" => "комментарий к таблице",
    ),
    ...
);

Все таблицы модуля должны начинаться с названия модуля. Например, таблицы модуля «Новости» – {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" => "название_модуля_на_русском",
    ),
);

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,
            ),
        )
    ),
    ...
);

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" => "номер_категории_меню",
    ),
    ...
);

var config = array() – настройки.

Пример:

public $config = array(
    array(
        
"name" => "название",
        
// по умолчанию, текущий модуль
        
"module_name" => "название_модуля",
        
// если значение переводятся на разные языки, то можно задать в виде массива
        
"value" => "значение",
    ),
);

var sql = array() – предустановленные данные.

Заполняется, если при установке модуля нужно вставить начальные или обязательные данные в таблицы базы данных модуля.

Пример:

public $sql = array(
    
"название_таблицы" => array(
        array(
            
"поле" => "значение",
            
"поле2" => "значение2",
        ),
        array(
            
"поле" => "значение",
            
"поле2" => "значение2",
        ),
    ),
    
"название_таблицы2" => array(
        ...
    ),
    ...
);

var demo = array() – демо-данные.

Формат тот же, что у предыдущего свойство. Но данные заполняются только в том случае, если отмечена опция «Заполнить сайт примерами из демо-версии».

Методы

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 () – Выполняет действия при установке модуля.

Функция может быть определена, если перед установкой нужно совершить действия, невыполняемые в стандартной логике установки.

Например, в модуле «Языки сайта» дополнительный язык добавляется, если отмечена опция «Создать две языковые версии сайта».

Пример:

protected function action()
{
    if (
count($this->langs) > 1)
    {
        
$this->sql["languages"][] =
        array(
            
"id" => 2,
            
"name" => 'eng',
            
"shortname" => 'eng',
        );
    }
}

void action_post () – Выполняет действия при установке модуля после основной установки.

Функция может быть определена, если нужно выполнить набор действий после установки всех модулей.

Например, в модуле «Поиск по сайту» нужно проиндексировать контент всех модулей.

Пример:

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 sql ([array $array = array()]) – Выполняет SQL-запросы.

  • array $array: массив с данными

void demo () – Установка demo-данных.

void uninstall () – Удаляет модуль.

void uninstall_action () – Выполняет действия при установке модуля.

Функция может быть определена, если нужно выполнить набор действий после удаления модуля.

Например, в модуле «Интернет магазин» нужно удалить создаваемую страницу «Заказ оформлен», к которой модуль не подключен.

Пример:

protected function uninstall_action()
{
    
DB::query("DELETE FROM {rewrite} WHERE rewrite='shop/cart/done'");
    
DB::query("DELETE FROM {site} WHERE [name]='Заказ оформлен'");
}

Ваши комментарии и дополнения

Опечатка в «var module – название текущИего модуля».
Куда надо прописать модуль, чтоб он появился вот тут?
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.