In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

EventHandler:OnAfterCopyToLive

From In-Portal Developers Guide

Jump to: navigation, search
События во временных таблицах События во временных таблицах
Статьи в этой категории

Данное событие вызывается для каждой записи после её копирования из временной таблицы в оригинальную.

Contents

Вызывается из событий

Данное событие косвенно (через метод kTempTablesHandler::DoCopyTempToOriginal) вызывается из события OnSave в процессе копирования данных из временной таблицы в оригинальную.

Входные параметры

название описание
id (int) ID, которое получила запись после её копирования из временной таблицы в оригинальную.
temp_id (int) ID, которое было у записи во временной таблице. Данное ID будет отрицательным (для подчинённых записей) или нулём (для главных записей) в случае, когда запись была создана во временной таблице и ещё не была скопирована в оригинальную таблицу.
Image:Infobox Icon.gif Объекты, которые будут получены из событий, вызываемых из класса kTempTablesHandler никогда не содержат достоверной информации.
Поэтому в случае, когда нужен объект, загруженный по ID скопированной записи, то его нужно загружать самому. Это будет показано на ниже приведённом примере.
$object =& $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
/* @var $object kDBItem */
 
$object->SwitchToLive(); // для того, чтобы объект был загружен из оригинальной таблицы, а не из временной
$object->Load( $event->getEventParam('id') );

Потенциальное применение

Данное событие можно использовать для автоматического обновления или добавления данных в другие таблицы на основе только что сохранённых в оригинальную таблицу данных. Это примерно тоже самое, что и используя параметр ids события OnSave, но только здесь можно работать с ID также и подчинённых записей. Ниже приведён пример добавления записи в журнал изменений:

function OnAfterCopyToLive(&$event)
{
	parent::OnAfterCopyToLive($event);
 
	$log_object =& $this->Application->recallObject('log');
	/* @var $log_object kDBItem */
 
	$log_object->addEntry($event->Prefix, $event->getEventParam('id'));
}

Ограничения

  • Данное событие будет вызываться только при использовании события OnSave, и следовательно будет работать только в случае, когда используются временные таблицы.
  • До версии Core v 4.2.1 это событие вызывалось только, если у префикса были подчинённые префиксы.

См. также