oni
Участник
- Сообщения
- 4
- Реакции
- 1
- Баллы
- 3
Данная статья расскажет Вам о том, как внести в движок GameCMS систему CallBack (отлова тех или иных событий в системе).
Было бы отлично, если бы данная система была бы внесена в предстоящих обновлениях движка.
И так, начнем:
Для начала, нам нужно создать файл inc/callback.php со следующим содержимым:
А так же создать inc/classes/class.callback.php со следующим содержимым:
Прописываем в inc/config.php (в самый низ):
А так же создать директорию inc/callbacks, где будут расположены наши функции под вызов.
Для примера, предлагаю отлов вызова в ajax/admin_panel.php
Создаем inc/callbacks/admin/request.php с содержимым:
И не забываем прописать вызов функции в удобное для нас место, к примеру в ajax/admin_panel.php, для вызова AdminRequest:
В итоге мы получим возможность вызывать функции для отлова тех или иных событий в системе.
Было бы отлично, если бы данная система была бы внесена в предстоящих обновлениях движка.
И так, начнем:
Для начала, нам нужно создать файл inc/callback.php со следующим содержимым:
PHP:
require_once(
__DIR__ . '/classes/class.callback.php'
);
$CallBack = new CallBack; // Вызов класса
$CallBack->Register([
__DIR__ . '/callbacks/', // Регистрация директории
__DIR__ . '/callbacks/admin/' // Регистрация директории
]);
$CallBack->Execute(); // Исполнение
А так же создать inc/classes/class.callback.php со следующим содержимым:
PHP:
/*
Автор: ONI ANY
Телеграм: https://t.me/oniany
*/
class CallBack {
var $Calls = [], $Path = [];
public function Register($Path) {
$this->Path += $Path;
}
public function Add($_ACTION, Closure $_DATA) {
$this->Calls[] = [
$_ACTION => $_DATA
];
}
public function Call($_NAME, $_ARGS = []) {
foreach($this->Calls as $_CALL) {
if(array_key_exists($_NAME, $_CALL)) {
if(!is_callable($_CALL[$_NAME])) {
throw new Exception('Функция обратного вызова - не вызываемая!');
}
call_user_func($_CALL[$_NAME], $_ARGS);
}
}
}
public function GetList() {
return $this->Calls;
}
public function Execute() {
foreach($this->Path as $Path) {
$Dirs = scandir(
$Path
);
foreach($Dirs as $Key => $Link) {
if(is_dir($Path . $Link)) {
unset(
$Dirs[$Key]
);
continue;
}
require_once(
$Path . $Link
);
}
}
}
}
Прописываем в inc/config.php (в самый низ):
PHP:
require_once __DIR__ . '/callback.php';
А так же создать директорию inc/callbacks, где будут расположены наши функции под вызов.
Для примера, предлагаю отлов вызова в ajax/admin_panel.php
Создаем inc/callbacks/admin/request.php с содержимым:
PHP:
$this->Add('AdminRequest', function($_ARGS) {
file_put_contents(
$_SERVER['DOCUMENT_ROOT'] . '/log.txt',
json_encode($_ARGS)
);
});
И не забываем прописать вызов функции в удобное для нас место, к примеру в ajax/admin_panel.php, для вызова AdminRequest:
PHP:
$CallBack->Call('AdminRequest', [
'POST' => $_POST,
'GET' => $_GET
]);
В итоге мы получим возможность вызывать функции для отлова тех или иных событий в системе.