Инсталляция

Для того чтобы модуль мог быть установлен опционально, создается файл инсталляции модуля. Это файл 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);
}

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

Пример:

// 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 () – Удаляет модуль.

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]='Заказ оформлен'");
}

База знаний

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

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

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.