|
При установке и удалении экземпляра существует возможность влиять на
ход процесса путем выполнения произвольного PHP кода на разных этапах
установки или удаления. Для этого в каталоге конфигурации создаются следующие файлы: install_before.php - будет выполнен перед установкой экземпляра; install_after.php - будет выполнен по окончанию установки экземпляра; install.php - будет выполнен в процессе установки экземпляра, не имеющего инстанции;
uninstall_before.php - будет выполнен перед удалением экземпляра; uninstall_after.php - будет выполнен по окончанию удаления экземпляра; uninstall.php - будет выполнен в процессе удаления экземпляра, не имеющего инстанции;
install_form.php - предоставляет возможность управлять формой установки экземпляра; install_form.lng - пользовательские языковые переменные для формы установки; install_form.tpl - пользовательские сеты элементов формы установки; frontEventHandlersRegistration.php - шаблон PHP-кода регистрации обработчиков событий; frontEventHandlersDeclaration.php - шаблон PHP-кода описания обработчиков событий;
errors.lng - пользовательские сообщения об ошибках; Пример добавления проверки окружения перед установкой экземпляра На примере проверки версии PHP.
<?php
if(version_compare(PHP_VERSION, '5.3.0', '<')){
throw new AMI_Package_Exception(
'invalid_php_version',
AMI_Package_Exception::CUSTOM_ERROR,
null,
array('ver' => PHP_VERSION)
);
}
|
%%invalid_php_version%en%%
This module works with PHP version 5.3.0 or higher. Your version: _ver_.
%%invalid_php_version%ru%%
Этот модуль работает только с PHP версии 5.3.0 или выше. Ваша версия: _ver_.
|
Пример добавления и обработки пользовательского поля на форме установки экземпляра модуля.
<?php
$this->addLocale($this->oTpl->parseLocale($this->configPath . 'install_form.lng'));
$this->addField(
array('name' => 'insert_sample_data', 'type' => 'checkbox')
);
|
%%form_field_insert_sample_data%en%%
Insert sample data to DB
%%form_field_insert_sample_data%ru%%
Добавить пример данных в БД
|
Обработка пользовательских полей формы установки
производится в файлах install_before.php или install_after.php в
зависимости от задачи.
<?php
if(AMI::getSingleton('env/request')->get('insert_sample_data', FALSE) !== FALSE){
for($i = 0; $i < 10; $i++){
$oItem = AMI::getResourceModel($modId . '/table')->getItem();
$oItem->header = 'Sample item ' . $i;
$oItem->announce = 'Announce of sample item ' . $i;
$oItem->body = 'Sample item ' . $i . ' body';
$oItem->public = 1;
$oItem->save();
}
}
|
Добавление обработчиков событий в точку входа системы.
$oStorage = AMI::getResource('storage/fs');
$srcPath = dirname(__FILE__) . '/';
$destPath = AMI_Registry::get('path/root') . '_local/';
$file = 'front_functions.php';
$oArgs = new AMI_Tx_Cmd_Args(
array(
'hypermod' => $this->oArgs->hypermod,
'config' => $this->oArgs->config,
'pkgId' => $this->oArgs->pkgId,
'modId' => $this->oArgs->modId,
'mode' => $this->oArgs->mode,
'handlerRegistrationSource' => $srcPath . 'frontEventHandlersRegistration.php',
'handlerDeclarationSource' => $srcPath . 'frontEventHandlersDeclaration.php',
'target' => $destPath . $file,
'oStorage' => $oStorage
)
);
$this->aTx['storage']->addCommand('pkg/handlers/install', $oArgs);
|
Удаление обработчиков событий из точки входа системы.
$oStorage = AMI::getResource('storage/fs');
$srcPath = dirname(__FILE__) . '/';
$targetPath = AMI_Registry::get('path/root') . '_local/';
$file = 'common_functions.php';
$oArgs = new AMI_Tx_Cmd_Args(
array(
'hypermod' => $this->oArgs->hypermod,
'config' => $this->oArgs->config,
'pkgId' => $this->oArgs->pkgId,
'modId' => $this->oArgs->modId,
'mode' => $this->oArgs->mode,
'target' => $targetPath . $file,
'oStorage' => $oStorage
)
);
$this->aTx['storage']->addCommand('pkg/handlers/uninstall', $oArgs);
|
Пример файла регистрации обработчиков событий.
<?php
AMI_Event::addHandler(...);
|
Пример файла описания обработчиков событий.
<?php
function ...($name, array $aEvent, $handlerModId, $srcModId){
...
return $aEvent;
}
|
Пример удаления добавленных при установке пользовательских файлов.
|