Рассмотрим подробно, как отслеживать событие. Допустим, у нас есть объект $myObject, который инициализируется в каком либо модуле. В конструкторе класса объекта следует написать код:
// системный объект $nc_core = nc_Core::get_object(); // прикрепление события $nc_core->event->bind($this, "updateSubdivision");
В приведённом примере сначала получается системный объект $nc_core, после чего вызывается метод bind(), который привязывает наш объект $myObject к событию updateSubdivision. Теперь при трансляции события будет вызван метод нашего объекта, причём название метода должно совпадать с названием события updateSubdivision(). Это означает, что в классе объекта присутствует метод updateSubdivision().
Внимание! В метод объекта будут переданы все параметры, доступные событию, в той последовательности, в которой они описаны в данной документации.
// системный объект $nc_core = nc_Core::get_object(); // прикрепление события $nc_core->event->bind($myObject, "updateSubdivision");
В этом случае код может быть написан где угодно в "зоне видимости" объекта $myObject.
Если при улавливании события нужно вызывать метод с названием, отличным от названия события, в методе прикрепления следует передать массив переназначения, это следует сделать во втором параметре:
// системный объект $nc_core = nc_Core::get_object(); // прикрепление события $nc_core->event->bind( $myObject, array("updateSubdivision" => "myMethodRun") );
Таким образом, после обновления раздела, наряду с другими слушателями события, будет вызван метод myMethodRun() нашего объекта $myObject с двумя параметрами — Catalogue_ID и Subdivision_ID.
Даже когда вторым аргументом метода bind() передан массив, метод может добавить только одного слушателя событий (будет добавлен первый слушатель события, описанный в первом элементе массива, а все остальные будут проигнорированы).
Внимание! Последний параметр в транслируемом событии может быть как целым числом (в случае, если в действии участвовал один объект), так и массивом чисел (при групповом действии). Методы-слушатели должны учитывать это.
В версии 5.6 и более поздних существует возможность прикрепить анонимную функцию в качестве обработчика события:
$nc_core->event->add_listener($event_name, $callback);
Например:
$nc_core->event->add_listener('updateSubdivision', function($site_id, $subdivision_id) { // код обработчика события });