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

From In-Portal Developers Guide

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

Данное событие позволяет выполнить дополнительные действия перед созданием новой записи в базе данных. Это событие вызывается до того, как выполняется проверка (validation) значений в полях объекта.

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

Данное событие косвенно вызывается из событий, создающих новые записи: OnCreate, OnPreSaveCreated, OnPreSaveAndOpenTranslator, OnPreSaveSubItem. Все ранее упомянутые события в свою очередь вызывают метод kDBItem::Create, который при помощи метода kDBItem::raiseEvent вызывает данное событие. Более детально это продемонстрировано ниже:

OnCreate -> kDBItem::Create -> kDBItem::raiseEvent

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

Данное событие можно использовать для

  • выполнения дополнительных проверок значений полей объекта;
  • установки значений полей, которые не доступны на форме редактирования;
  • запрета создания записи в базе данных.

Ниже будет приведён пример, в котором показано как можно использовать все описанные приёмы.

function OnBeforeItemCreate(&$event)
{
	parent::OnBeforeItemCreate($event);
 
	$object =& $event->getObject();
	/* @var $object kDBItem */
 
	if ($object->GetDBField('Name') != 'John') {
		// если значение поля Name не равно John, то показывать специфическую (не стандартную) ошибку
		$object->SetError('Name', 'invalid_name', 'la_error_OnlyJohnsAllowed');
	}
 
	// запоминание времени создания записи
	$now = adodb_mktime();
	$object->SetDBField('CreatedOn_date', $now);
	$object->SetDBField('CreatedOn_time', $now);
 
	if ($object->GetDBField('Status') != STATUS_ACTIVE) {
		// можно создавать записи только с активным статусом
		$event->status = erFAIL;
	}
}

Ограничения

Если статус события ($event->status), по его завершении, не будет равен erSUCCESS, то событие OnAfterItemCreate вызвано не будет и запись не будет создана в базе данных.