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

From In-Portal Developers Guide

Jump to: navigation, search

События для работы со списками События для работы со списками
Статьи в этой категории

Данное событие является неким исключением из правил, во-первых имя не содержит обязательный для имён событий префикс "On". Во-вторых это не совсем событие, а размещено вместе с событиями потому что использует большое количество базовых методов событий. С помощью этого события можно устанавливать фильтры в ручном режиме для любого Special:

function SetCustomQuery(&$event)
	{
		parent::SetCustomQuery($event);
		$object =& $event->getObject();
		if ($event->Special == 'test') {
			$object->addFilter('IsVisible_filter', '%1$s.`IsVisible` = 1');
		}
	}

Добавлять поля ORDER BY с указанием направления сортировки:

function SetCustomQuery(&$event)
	{
		parent::SetCustomQuery($event);
		$object =& $event->getObject();
		if ($event->Special == 'test') {
			$object->AddOrderField('Group', 'DESC');
		}
	}

Устанавливать значение GROUP BY:

function SetCustomQuery(&$event)
	{
		parent::SetCustomQuery($event);
		$object =& $event->getObject();
		if ($event->Special == 'test') {
			$object->AddGroupByField('Group');
		}
	}

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

Автоматически вызывается из события OnListBuild и получает оттуда все необходимые параметры (объект класса EventHandler). Стандартный подход не предусматривает самостоятельный вызов данного метода из обработчика событий.


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

Данное событие вызывается непосредственно перед посылкой запроса к базе данных и позволяет изменять некоторые характеристики запроса, и даже полностью менять его (не рекомендуется). Можно, например, основываясь на Special элемента установить в запросе WHERE фильтр в необходимое значение и т.д.

Заметки редактора