error = '插件目录不可读或者不存在'; return false; } $addons = array(); $map['name'] = array('in', $dirs); $list = $this->where($map) ->field(true) ->order('sort asc,id desc') ->select(); foreach ($list as $addon) { $addons[$addon['name']] = $addon; } foreach ($dirs as $value) { if (!isset($addons[$value])) { $class = get_addon_class($value); if (!class_exists($class)) { // 实例化插件失败忽略执行 \Think\Log::record('插件' . $value . '的入口文件不存在!'); continue; } $obj = new $class; $addons[$value] = $obj->info; if ($addons[$value]) { $addons[$value]['status'] = -1; // 未安装 } } } foreach ($addons as &$val) { switch ($val['status']) { case '-1': // 未安装 $val['status'] = ''; $val['right_button']['install']['title'] = '安装'; $val['right_button']['install']['attribute'] = 'class="label label-success ajax-get" href="' . U('install', array('addon_name' => $val['name'])) . '"'; break; case '0': // 禁用 $val['status'] = ''; $val['right_button']['config']['title'] = '设置'; $val['right_button']['config']['attribute'] = 'class="label label-info" href="' . U('config', array('id' => $val['id'])) . '"'; $val['right_button']['forbid']['title'] = '启用'; $val['right_button']['forbid']['attribute'] = 'class="label label-success ajax-get" href="' . U('setStatus', array('status' => 'resume', 'ids' => $val['id'])) . '"'; $val['right_button']['uninstall']['title'] = '卸载'; $val['right_button']['uninstall']['attribute'] = 'class="label label-danger ajax-get" href="' . U('uninstall', array('id' => $val['id'])) . '"'; if ($val['adminlist']) { $val['right_button']['adminlist']['title'] = '数据管理'; $val['right_button']['adminlist']['attribute'] = 'class="label label-success" href="' . U('adminlist', array('name' => $val['name'])) . '"'; } break; case '1': // 正常 $val['status'] = ''; $val['right_button']['config']['title'] = '设置'; $val['right_button']['config']['attribute'] = 'class="label label-info" href="' . U('config', array('id' => $val['id'])) . '"'; $val['right_button']['forbid']['title'] = '禁用'; $val['right_button']['forbid']['attribute'] = 'class="label label-warning ajax-get" href="' . U('setStatus', array('status' => 'forbid', 'ids' => $val['id'])) . '"'; $val['right_button']['uninstall']['title'] = '卸载'; $val['right_button']['uninstall']['attribute'] = 'class="label label-danger ajax-get" href="' . U('uninstall', array('id' => $val['id'])) . '"'; if ($val['adminlist']) { $val['right_button']['adminlist']['title'] = '数据管理'; $val['right_button']['adminlist']['attribute'] = 'class="label label-success" href="' . U('adminlist', array('name' => $val['name'])) . '"'; } break; } } return $addons; } /** * 插件显示内容里生成访问插件的url * @param string $url url * @param array $param 参数 * */ public function getAddonUrl($url, $param = array()) { $url = parse_url($url); $case = C('URL_CASE_INSENSITIVE'); $addons = $case ? parse_name($url['scheme']) : $url['scheme']; $controller = $case ? parse_name($url['host']) : $url['host']; $action = trim($case ? strtolower($url['path']) : $url['path'], '/'); // 解析URL带的参数 if (isset($url['query'])) { parse_str($url['query'], $query); $param = array_merge($query, $param); } // 基础参数 $params = array( '_addons' => $addons, '_controller' => $controller, '_action' => $action, ); $params = array_merge($params, $param); //添加额外参数 return U(MODULE_MARK . '/Addon/execute', $params, true, true); } }