Инсталляция
Для того чтобы модуль мог быть установлен опционально, создается файл
инсталляции модуля. Это файл 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 () – Удаляет модуль.
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]='Заказ оформлен'");
}
База знаний
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.
Ваш комментарий будет первым.