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

From In-Portal Developers Guide

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

Данное событие вызывается перед загрузкой объекта из базы данных.

Contents

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

Данное событие косвенно вызывается из события OnItemBuild в тот момент, когда объект автоматически загружается по ID, переданному в запросе от пользователя. Также оно вызывается из метода kDBItem::Load. Более детально это продемонстрировано ниже:

OnItemBuild -> kDBEventHandler::LoadItem -> kDBItem::Load -> kDBItem::raiseEvent

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

название описание
id (int) ID той записи, для которой поступил запрос на загрузку.

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

Данное событие можно применять для запрета чтения конкретных записей из базы данных. Например, у пользователя на экране есть распорядок дня на сегодня. В этом распорядке есть какая либо приоритетная запись, которую пользователь должен просмотреть в первую очередь. Независимо от того, какой элемент он выбрал, и только после просмотра приоритетной записи разрешать просмотр других элементов.

В таком случае содержание данного события будет выглядеть, как на ниже приведённом примере.

function OnBeforeItemLoad(&$event)
{
	parent::OnBeforeItemLoad($event);
 
	// получить ID загружаемого Item
	$id = $event->getEventParam('id')
 
	// вызывать некий написанный ранее метод для проверки, а была ли ранее просмотрена приоритетная запись
	$valid = $this->ValidatePriority($id);
	if ($valid) {
		return true;
	} else {
		// здесь будет размещён код, который даст возможность подгрузить приоритетную запись, вместо текущей
	}
}

Ограничения

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