InitConfigBehavior.class.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace Common\Behavior;
  3. use Think\Behavior;
  4. defined('THINK_PATH') or exit();
  5. /**
  6. * 根据不同情况读取数据库的配置信息并与本地配置合并
  7. * 本行为扩展很重要会影响核心系统前后台、模块功能及模版主题使用
  8. * 如非必要或者并不是十分了解系统架构不推荐更改
  9. *
  10. */
  11. class InitConfigBehavior extends Behavior
  12. {
  13. /**
  14. * 行为扩展的执行入口必须是run
  15. *
  16. */
  17. public function run(&$content)
  18. {
  19. // 安装模式下直接返回
  20. if (defined('BIND_MODULE') && BIND_MODULE === 'Install') {
  21. return;
  22. }
  23. // 读取数据库中的配置
  24. $system_config = S('DB_CONFIG_DATA');
  25. if (!$system_config || APP_DEBUG === true) {
  26. // 获取所有系统配置
  27. $system_config = D('Admin/Config')->lists();
  28. // SESSION与COOKIE与前缀设置避免冲突
  29. $system_config['SESSION_PREFIX'] = strtolower(ENV_PRE . MODULE_MARK . '_'); // Session前缀
  30. $system_config['COOKIE_PREFIX'] = strtolower(ENV_PRE . MODULE_MARK . '_'); // Cookie前缀
  31. // Session数据表
  32. $system_config['SESSION_TABLE'] = C('DB_PREFIX') . 'admin_session';
  33. // 获取所有安装的模块配置
  34. $module_list = D('Admin/Module')->where(array('status' => '1'))->select();
  35. foreach ($module_list as $val) {
  36. $module_config[strtolower($val['name'] . '_config')] = json_decode($val['config'], true);
  37. $module_config[strtolower($val['name'] . '_config')]['module_name'] = $val['name'];
  38. }
  39. if ($module_config) {
  40. // 合并模块配置
  41. $system_config = array_merge($system_config, $module_config);
  42. // 加载模块标签库及行为扩展
  43. $system_config['TAGLIB_PRE_LOAD'] = explode(',', C('TAGLIB_PRE_LOAD')); // 先取出配置文件中定义的否则会被覆盖
  44. foreach ($module_config as $key => $val) {
  45. // 加载模块标签库
  46. if (isset($val['taglib'])) {
  47. foreach ($val['taglib'] as $tag) {
  48. $tag_path = APP_PATH . $val['module_name'] . '/TagLib/' . $tag . '.class.php';
  49. if (is_file($tag_path)) {
  50. $system_config['TAGLIB_PRE_LOAD'][] = $val['module_name'] . '\\TagLib\\' . $tag;
  51. }
  52. }
  53. }
  54. // 加载模块行为扩展
  55. if (isset($val['behavior'])) {
  56. foreach ($val['behavior'] as $bhv) {
  57. $bhv_path = APP_PATH . $val['module_name'] . '/Behavior/' . $bhv . 'Behavior.class.php';
  58. if (is_file($bhv_path)) {
  59. \Think\Hook::add('lingyun_behavior', $val['module_name'] . '\\Behavior\\' . $bhv . 'Behavior');
  60. }
  61. }
  62. }
  63. }
  64. $system_config['TAGLIB_PRE_LOAD'] = implode(',', $system_config['TAGLIB_PRE_LOAD']);
  65. }
  66. // 获取所有安装的插件配置
  67. $addon_list = D('Admin/Addon')->where(array('status' => '1'))->select();
  68. foreach ($addon_list as $val) {
  69. $addon_config[strtolower($val['name'] . '_addon_config')] = json_decode($val['config'], true);
  70. $addon_config[strtolower($val['name'] . '_addon_config')]['addon_name'] = $val['name'];
  71. }
  72. if ($addon_config) {
  73. // 合并模块配置
  74. $system_config = array_merge($system_config, $addon_config);
  75. // 加载插件标签库及行为扩展
  76. $system_config['TAGLIB_PRE_LOAD'] = explode(',', $system_config['TAGLIB_PRE_LOAD']); // 先取出配置文件中定义的否则会被覆盖
  77. foreach ($addon_config as $key => $val) {
  78. // 加载模块标签库
  79. if (isset($val['taglib'])) {
  80. foreach ($val['taglib'] as $tag) {
  81. $tag_path = C('ADDON_PATH') . $val['addon_name'] . '/TagLib/' . $tag . '.class.php';
  82. if (is_file($tag_path)) {
  83. $system_config['TAGLIB_PRE_LOAD'][] = 'Addons\\' . $val['addon_name'] . '\\TagLib\\' . $tag;
  84. }
  85. }
  86. }
  87. // 加载插件行为扩展
  88. if (isset($val['behavior'])) {
  89. foreach ($val['behavior'] as $bhv) {
  90. $bhv_path = C('ADDON_PATH') . $val['addon_name'] . '/Behavior/' . $bhv . '.class.php';
  91. if (is_file($bhv_path)) {
  92. \Think\Hook::add('lingyun_behavior', 'Addons\\' . $val['addon_name'] . '\\Behavior\\' . $bhv);
  93. }
  94. }
  95. }
  96. }
  97. $system_config['TAGLIB_PRE_LOAD'] = implode(',', $system_config['TAGLIB_PRE_LOAD']);
  98. }
  99. S('DB_CONFIG_DATA', $system_config, 3600); // 缓存配置
  100. }
  101. // 系统主页地址配置
  102. $system_config['TOP_HOME_DOMAIN'] = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'];
  103. $system_config['HOME_DOMAIN'] = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'];
  104. $system_config['HOME_PAGE'] = $system_config['HOME_DOMAIN'] . __ROOT__;
  105. $system_config['TOP_HOME_PAGE'] = $system_config['TOP_HOME_DOMAIN'] . __ROOT__;
  106. // 如果是后台并且不是Admin模块则设置默认控制器层为Admin
  107. if (MODULE_MARK === 'Admin' && MODULE_NAME !== 'Admin') {
  108. $system_config['DEFAULT_C_LAYER'] = 'Admin';
  109. $system_config['VIEW_PATH'] = APP_PATH . MODULE_NAME . '/View/Admin/';
  110. }
  111. // 静态资源域名
  112. $current_domain = $system_config['TOP_HOME_PAGE'];
  113. $system_config['CURRENT_DOMAIN'] = $current_domain;
  114. // 模版参数配置
  115. $system_config['TMPL_PARSE_STRING'] = C('TMPL_PARSE_STRING'); // 先取出配置文件中定义的否则会被覆盖
  116. $system_config['TMPL_PARSE_STRING']['__IMG__'] = $current_domain . '/' . APP_PATH . MODULE_NAME . '/View/Public/img';
  117. $system_config['TMPL_PARSE_STRING']['__CSS__'] = $current_domain . '/' . APP_PATH . MODULE_NAME . '/View/Public/css';
  118. $system_config['TMPL_PARSE_STRING']['__JS__'] = $current_domain . '/' . APP_PATH . MODULE_NAME . '/View/Public/js';
  119. $system_config['TMPL_PARSE_STRING']['__LIBS__'] = $current_domain . '/' . APP_PATH . MODULE_NAME . '/View/Public/libs';
  120. // 前台默认模块静态资源路径及模板继承基本模板
  121. $default_public_path = APP_PATH . C('DEFAULT_MODULE') . '/View/Public';
  122. if (is_dir($default_public_path)) {
  123. $system_config['DEFAULT_PUBLIC_LAYOUT'] = $default_public_path . '/layout.html';
  124. $system_config['TMPL_PARSE_STRING']['__DEFAULT_IMG__'] = $system_config['TOP_HOME_PAGE'] . ltrim($default_public_path, '.') . '/img';
  125. $system_config['TMPL_PARSE_STRING']['__DEFAULT_CSS__'] = $system_config['TOP_HOME_PAGE'] . ltrim($default_public_path, '.') . '/css';
  126. $system_config['TMPL_PARSE_STRING']['__DEFAULT_JS__'] = $system_config['TOP_HOME_PAGE'] . ltrim($default_public_path, '.') . '/js';
  127. $system_config['TMPL_PARSE_STRING']['__DEFAULT_LIBS__'] = $system_config['TOP_HOME_PAGE'] . ltrim($default_public_path, '.') . '/libs';
  128. }
  129. C($system_config); // 添加配置
  130. }
  131. }