Алгоритм работы Neutrino Atomic Edition
Для тех, кто желает ознакомиться с принципом работы Neutrino Atomic Edition с целью дальнейшего написания плагинов или тем оформления, предлагается простое описание алгоритма работы этой CMS.
Подробнее...Для тех, кто желает ознакомиться с принципом работы Neutrino Atomic Edition с целью дальнейшего написания плагинов или тем оформления, предлагается простое описание алгоритма работы этой CMS.
Подробнее...Neutrino Atomic Edition стала еще более гибкой и расширяемой с полноценной поддержкой хуков, основанной на моей авторской технологии.
Код функции:
function hook($result){
global $hook;
$d_backtrace=debug_backtrace();
$backtrace=is_array($d_backtrace[1])?$d_backtrace[1]:$d_backtrace;
$functions=@$hook[$backtrace['function']];
$args=$backtrace['args'];
if(is_array($functions)){
ksort($functions);
foreach($functions as $function)
if($function&&function_exists($function))
$result=$function($result,$args);
}
return $result;
}
хукаются все функции, объявленные в lib/functions.php. В последующих версиях, вся функциональность будет переведена в функции и подключена к системе хуков.
Для разработчиков: чтобы хукнуть функцию ядра, нужно в двумерном массиве $hook добавить во вложенный массив под ключом = имени хукаемой функции элемент со значением = имени функции, которую надо выполнить. В качестве параметров, хук-функция должна принимать переменную - return хукаемой функции, и массив - аргументы, переданные хукаемой функции. Возвращать хук-функция должна данные, которыми нужно подменить вывод хукаемой функции.
Пример:
#Хукаем функцию ядра clean_str()
#Объявляем произвольную функцию согласно спецификации
function my_function($return,$args){
return htmlentities($args[0]);
}
#Регистрируем my_function() в качестве хука к clean_str()
$hook['clean_str'][]='my_function';
Готово. Теперь при каждом запуске clean_str(), результат ее работы перед выводом будет обрабатываться еще и функцией my_funciton.
На данный момент эта технология реализована в SVN (редакция 102).
Эти изменения после тестирования будут включены в релиз 0.8.7, который не за горами.