InitHookBehavior.class.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace Common\Behavior;
  3. use Think\Behavior;
  4. use Think\Hook;
  5. defined('THINK_PATH') or exit();
  6. /**
  7. * 初始化钩子信息
  8. *
  9. */
  10. class InitHookBehavior extends Behavior
  11. {
  12. /**
  13. * 行为扩展的执行入口必须是run
  14. *
  15. */
  16. public function run(&$content)
  17. {
  18. // 安装模式下直接返回
  19. if (defined('BIND_MODULE') && BIND_MODULE === 'Install') {
  20. return;
  21. }
  22. // 添加插件配置
  23. $addon_config['ADDON_PATH'] = './Addons/';
  24. $addon_config['AUTOLOAD_NAMESPACE'] = C('AUTOLOAD_NAMESPACE');
  25. $addon_config['AUTOLOAD_NAMESPACE']['Addons'] = $addon_config['ADDON_PATH'];
  26. C($addon_config);
  27. $data = S('hooks');
  28. if (!$data || APP_DEBUG === true) {
  29. $hooks = D('Admin/Hook')->getField('name,addons');
  30. foreach ($hooks as $key => $value) {
  31. if ($value) {
  32. $map['status'] = 1;
  33. $names = explode(',', $value);
  34. $map['name'] = array('IN', $names);
  35. $data = D('Admin/Addon')->where($map)->getField('id,name');
  36. if ($data) {
  37. $addons = array_intersect($names, $data);
  38. Hook::add($key, array_map('get_addon_class', $addons));
  39. }
  40. }
  41. }
  42. S('hooks', Hook::get());
  43. } else {
  44. Hook::import($data, false);
  45. }
  46. }
  47. }