Решил перековырять немного ядро

Мои нововведения:
  • Хуки вокруг инициализации модулей _before и _after за счет методов InitModule
  • Переработанный __autoload
  • Получение информации о классе методом GetClassInfo вплоть до пути к класс-файлу

Плюсы
  • Никаких более регулярок для парсинга имени класса в других скриптах, всё в одном месте
  • Нет более вилок в коде по поводу регистра в именах классов и методов. Везде учитывается регистр (собственно, чем нам грозит php6, насколько я помню)
  • Стандартные хуки вокруг инициализации модулей — это просто прекрасно, я считаю, мне часто нужны были
  • func_list_plugins() — замена куче дублирующегося кода
  • Переработанный __autoload автоматом инклюдит все возможные классы, имена которых описаны по правилам ядра.

Сырцы
engine/classes/Engine.class.php raw
engine/modules/hook/Hook.class.php raw

func_list_plugins() (поместить в engine/include/function.php)
function func_list_plugins($bAll = false){
	$sPluginsDir = Config::Get('path.root.server').'/plugins';
	$sPluginsListFile = $sPluginsDir.'/plugins.dat';
	$aPlugin = array();
	if($bAll){
		$aPluginRaw = array();
		$aPaths = glob("$aPluginRaw/*", GLOB_ONLYDIR);
		if($aPaths)
		foreach($aPaths as $sPath){
			$aPluginRaw[] = basename($sPath);
		}
	}else{
		$aPluginRaw = @array_map('trim', file($sPluginsListFile));
	}
	if($aPluginRaw)
	foreach($aPluginRaw as $sPlugin){
		$sPluginXML = "$sPluginsDir/$sPlugin/plugin.xml";
		if(is_file($sPluginXML)){
			$aPlugin[] = $sPlugin;
		}
	}
	return $aPlugin;
	
}


Давайте потестим и обсудим, насколько всё это полезно?

зыж. модифицированное ядро отлично работает на моей тестовой площадке livestreet.ochecho.ru/

5 комментариев

avatar
По теме — полностью поддерживаю «нормализацию» и уход от регулярок там, где им точно не место

Офтопик — Было бы ещё круто ввести дополнительные хуки для работы с _любыми_ видами топиков. Я, например, делаю плагин, который для всех типов контента будет генерить ЧПУ — а получается что к топикам типа Опрос и Ссылка никак без бубна не подключиться :( А как жить плагину, если типов контента за счёт других плагинов будет больше?
avatar
почему же не подступиться к любым видам топика?
в xtext я делаю наследование entity через aInherit и вершу с ними чего хочу
avatar
или таки это относится к хукам шаблонов?
я недавно товарищу ort'у предлагал ввести AddHookPreg, который выполнял бы хук по регулярке в его названии
avatar
Да, именно к хукам шаблонов :)
avatar
Хуки с регулярками: engine/modules/hook/Hook.class.php

Пример:
class PluginTest_HookTestPreg extends Hook {
	public function RegisterHook() {
		$this->AddHook('#^module_[^_]+_init_after$#','testpreg');
	}
	public function testpreg($aVars){
		dump(__METHOD__.': '.$this->sHookName);
	}
}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.