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:OnBeforeDeleteFromLive

From In-Portal Developers Guide

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

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

Contents

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

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

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

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

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

Данное событие можно использовать для сохранения данных, которые находятся в оригинальной таблице. К примеру можно сохранить оригинальные данные и далее сравнить их с новыми и выслать оповещения о каких либо критичных изменениях. Если id меньше или равно нулю, то запись ещё не была скопирована в оригинальную таблицу и оповещать никого конечно не нужно. Это будет показано на ниже приведённом примере.

function OnBeforeDeleteFromLive(&$event)
{
	parent::OnBeforeDeleteFromLive($event);
 
	$object =& $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
	/* @var $object kDBItem */
 
	$object->Load( $event->getEventParam('id') );
 
	if ($event->getEventParam('id') <= 0) {
		return ;
	}
 
	$prev_data = $this->Application->GetVar('prev_info');
	if (!$prev_data) {
		$prev_data = Array ();
	}
 
	$prev_data[ $object->GetID() ] = $object->GetFieldValues();
	$this->Application->SetVar('prev_info', $prev_data);
}

Ограничения

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

См. также