XoopsPreload
Класс XoopsPreload
Написал andrey3761 в 13.01.2010 3:40:00 (3824 прочтений)

Данный класс предназначен для подключения произвольного кода в системные файлы, не изменяя последние. Он появился в версии XOOPS 2.4.0.



Объявление класса:

$xoopsPreload =& XoopsPreload::getInstance();

Методы:

Конструктор

function XoopsPreload()
{
    $this->setPreloads();
    $this->setEvents();
}

@return    void

Объявление

function &getInstance()
{
static $instance = false;
if (!$instance) {
$instance = new XoopsPreload();
}
return $instance;
}

@return object

Объявление класса. Разрешено только один раз. Возвращает объект.

Получение информации

function setPreloads()
 {
$modules_list = XoopsLists::getDirListAsArray(XOOPS_ROOT_PATH . "/modules/");
$i = 0;
foreach ($modules_list as $module) {
if (is_dir($dir = XOOPS_ROOT_PATH . "/modules/{$module}/preloads/")) {
$file_list = XoopsLists::getFileListAsArray($dir);
foreach ($file_list as $file) {
if (preg_match('/(\.php)$/i', $file)) {
$file = substr($file, 0, -4);
$this->_preloads[$i]['module'] = $module;
$this->_preloads[$i]['file'] = $file;
$i++;
}
}
}
}
}

@return void

Сначала идёт получение списка модулей в папке modules.
Если существует папка "/modules/{$module}/preloads/", то идёт получение списка файлов в ней.
Если данный файл является *.php файлов, то из имени файла удаляется расширение .php и заносится информация в массив:
$this->_preloads[$i]['module'] = $module; (имя папки с модулем)
$this->_preloads[$i]['file'] = $file; (имя файла без .php)



function setEvents()
{
foreach ($this->_preloads as $preload) {
include_once XOOPS_ROOT_PATH . '/modules/' . $preload['module'] . '/preloads/' . $preload['file']. '.php';
$class_name = ucfirst($preload['module']) . ucfirst($preload['file']) . 'Preload' ;
if (!class_exists($class_name)) {
continue;
}
$class_methods = get_class_methods($class_name);
foreach ($class_methods as $method) {
if (strpos($method, 'event') === 0) {
$event_name = strtolower(str_replace('event', '', $method));
$event= array('class_name' => $class_name, 'method' => $method);
$this->_events[$event_name][] = $event;
}
}
}
}

Идёт переборка массива $this->_preloads.
Подключается файл (плагин) '/modules/' . $preload['module'] . '/preloads/' . $preload['file']. '.php'.
Если в данном файле нет класса Папка_модуляИмя_файлаPreload цикл продолжается дальше.
Если данный класс есть, то получаем массив имён методов данного класса.
Перебираем все методы из массива, если имя данного метода начинается с event , то заносим информацию об классе и его методах в массив:
$event_name = strtolower(str_replace('event', '', $method));
$event= array('class_name' => $class_name, 'method' => $method);
$this->_events[$event_name][] = $event;

Вызов событий

function triggerEvent($event_name, $args = array())
{
$event_name = strtolower(str_replace('.', '', $event_name));
if (isset($this->_events[$event_name])) {
foreach ($this->_events[$event_name] as $event) {
call_user_func(array($event['class_name'], $event['method']), $args);
}
}
}

@param $event_name string Name of the event to trigger
@param $args array Method arguments

@return void

Данный метод вызывает события, которые нужно сделать в данном месте кода.
Принимает название события (строка) и аргументы, которые нужно передать (массив).
В названии события все удаляются все точки.
Если есть массив для данного события $this->_events[$event_name] , то перебираем его.
Вызываем все методы класса, которые принадлежат этому событию и передаём им параметры:
call_user_func(array($event['class_name'], $event['method']), $args);


Теги: Класс   XoopsPreload  
Версия для печати Отправить эту статью другу Создать из статьи PDF-файл

Похожие новости

Работа с классом Criteria

Класс Criteria создан для создания критериев выборки из БД. Сначала объявляем класс $criteria = new CriteriaCompo(); Затем вставляем в него элементы $criteriaKeywords-...

Работа с классом Preload

Для начала нужно в нужных модулях создать папку preloads и положить в неё *.php файлы с правильными именами (core.php плагин для файлов ядра). В файлах плагинах...

Класс XoopsMySQLDatabase

Данный класс предназначен для зпроссов к базе данных MySQL. Данный класс является наследником класса XoopsDatabase. Исходник класса находится в файле...

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Кто активен

8 пользователь(ей) активно (4 пользователь(ей) просматривают Новости)

Участников: 0
Гостей: 8

далее...

Рекомендуем