How To: Действие для переноса копии информационного элемента в другую информационную систему
В данной статье рассмотрим пример реализации в центре администрирования кнопки(действия формы) для переноса выбранных элементов в другую информационную систему.
- Первый шаг - создание самого действия. Для этого перейдите в раздел Система → Формы центра администрирования. Далее необходимо найти стандартную форму списка информационных элементов под названием "Информационные группы и элементы" (id 12). Заходим в список действий формы, создаем новое действие и указываем:
Название - "Перенести в ИС" (может быть любым, даже пустым);
Функция-обработчик - moveToInfSys;
Пиктограмма - fa fa-sign-out
Цвет - purple
Ставим только(!) флаг "Групповая операция".
После этого сохраняем действие и у нас в писке действие появится новая кнопка. - Следующий шаг - добавление обработчика действия. Редактируем файл bootstrap.php в корне системы на сервере и в самый конец файла добавляем код:
class Admin_Form_Controller_Observer { static public function onCallmoveToInfSys($oAdmin_Form_Controller, $args) { list($datasetKey, $oObject, $operation) = $args; $oAdmin_Form = $oAdmin_Form_Controller->getAdminForm(); Core_I18n::instance()->expandLng('informationsystem_item', array( 'moveToInfSys_success' => 'Элемент перенесен успешно!', ) ); // Проверка на GUID нужной формы if ($oAdmin_Form->guid == '0F65DDC4-926A-5A48-65A2-531620F09FD1') { if (is_null($operation)) { // Original windowId $windowId = $oAdmin_Form_Controller->getWindowId(); $newWindowId = 'Move_' . time(); $oCore_Html_Entity_Form = Core::factory('Core_Html_Entity_Form'); $oCore_Html_Entity_Div = Core::factory('Core_Html_Entity_Div') ->id($newWindowId) ->add($oCore_Html_Entity_Form); $oCore_Html_Entity_Form->action($oAdmin_Form_Controller->getPath()) ->method('post'); $window_Admin_Form_Controller = clone $oAdmin_Form_Controller; // Select на всплывающем окне должен быть найден через ID нового окна, а не id_content $window_Admin_Form_Controller->window($newWindowId); $oSite = Core_Entity::factory('Site')->getById(CURRENT_SITE); $aOptions = array(); $aInformationsystems = $oSite->Informationsystems->findAll(FALSE); foreach ($aInformationsystems as $oInformationsystem) { $aOptions[$oInformationsystem->id] = $oInformationsystem->name; } $oAdmin_Form_Entity_Select = Admin_Form_Entity::factory('Select') ->name('destinationId') ->id('destinationId') ->style('width: 280px; float: left') ->filter(TRUE) ->options($aOptions) ->caption('Информационная система') // ->value($this->value) ->controller($window_Admin_Form_Controller); $oCore_Html_Entity_Form->add($oAdmin_Form_Entity_Select); // Идентификаторы переносимых указываем скрытыми полями в форме, чтобы не превысить лимит GET $aChecked = $oAdmin_Form_Controller->getChecked(); // Clear checked list $oAdmin_Form_Controller->clearChecked(); foreach ($aChecked as $datasetKey => $checkedItems) { foreach ($checkedItems as $key => $value) { $oCore_Html_Entity_Form->add( Core::factory('Core_Html_Entity_Input') ->name('hostcms[checked][' . $datasetKey . '][' . $key . ']') ->value(1) ->type('hidden') //->controller($window_Admin_Form_Controller) ); } } $oAdmin_Form_Entity_Button = Admin_Form_Entity::factory('Button') ->name('apply') ->type('submit') ->class('applyButton btn btn-blue') ->value('Перенести') ->onclick( 'bootbox.hideAll(); ' . $oAdmin_Form_Controller->getAdminSendForm(NULL, 'apply') ) ->controller($oAdmin_Form_Controller); $oCore_Html_Entity_Form ->add( Admin_Form_Entity::factory('Div') ->class('form-group col-12') ->add($oAdmin_Form_Entity_Button) ); $oCore_Html_Entity_Div->execute(); ob_start(); Core::factory('Core_Html_Entity_Script') ->value("$(function() { $('#{$newWindowId}').HostCMSWindow({ autoOpen: true, destroyOnClose: false, title: 'Выберите информационную систему для переноса', AppendTo: '#{$windowId}', width: 750, height: 140, addContentPadding: true, modal: false, Maximize: false, Minimize: false }); });") ->execute(); // Break execution for other return array(TRUE, ob_get_clean(), NULL); } else { $destinationId = intval(Core_Array::getPost('destinationId')); if (is_null($destinationId)) { throw new Core_Exception("destinationId is NULL"); } $oNewInformationsystemItem = clone $oObject; $oNewInformationsystemItem->informationsystem_group_id = 0; $oNewInformationsystemItem->informationsystem_id = $destinationId; $oNewInformationsystemItem->datetime = Core_Date::timestamp2sql(time()); $oNewInformationsystemItem->save(); return array(FALSE, '', NULL); } } } } Core_Event::attach('Admin_Form_Controller.onCallmoveToInfSys', array('Admin_Form_Controller_Observer', 'onCallmoveToInfSys'));
Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.