diff --git a/README.md b/README.md index 690a41e..739ef8a 100755 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ OneNav 是一款功能强大且简洁高效的浏览器书签管理器,支持 **底部工具栏** -底部工具栏默认对访客隐藏,只有党管理员登录后才会显示,支持5个操作按钮,分别是:添加链接、返回顶部、订阅管理、系统状态、后台管理。 +底部工具栏默认对访客隐藏,只有当管理员登录后才会显示,支持5个操作按钮,分别是:添加链接、返回顶部、订阅管理、系统状态、后台管理。  diff --git a/class/Api.php b/class/Api.php index 9aef3e1..3505ea5 100755 --- a/class/Api.php +++ b/class/Api.php @@ -1250,45 +1250,171 @@ class Api { } } /** - * 获取链接信息 - */ - public function get_link_info($token,$url){ + * 获取链接信息 + */ + /** + * 获取链接的标题和描述信息 (优化版) + * + * @param string $token 用于认证的令牌 + * @param string $url 需要获取信息的URL + * @return void 直接输出JSON格式的返回结果 + */ + public function get_link_info($token, $url) + { $this->auth($token); - //检查链接是否合法 - $pattern = "/^(http:\/\/|https:\/\/).*/"; - //链接不合法 - if( empty($url) ) { - $this->err_msg(-2000,'URL不能为空!'); - } - if( !preg_match($pattern,$url) ){ - $this->err_msg(-1010,'只支持识别http/https协议的链接!'); - } - else if( !filter_var($url, FILTER_VALIDATE_URL) ) { - $this->err_msg(-2000,'只支持识别http/https协议的链接!'); - } - //获取网站标题 - $c = curl_init(); - curl_setopt($c, CURLOPT_URL, $url); - curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false); - //设置超时时间 - curl_setopt($c , CURLOPT_TIMEOUT, 10); - $data = curl_exec($c); - curl_close($c); - $pos = strpos($data,'utf-8'); - if($pos===false){$data = iconv("gbk","utf-8",$data);} - preg_match("/
标签内容 + if (empty($link['description'])) { + $p_nodes = $xpath->query('//p'); + foreach ($p_nodes as $p_node) { + $p_text = trim($p_node->nodeValue); + // 选取一个长度较长的段落作为描述 + if (mb_strlen($p_text, 'UTF-8') > 30) { + $link['description'] = $p_text; + break; + } + } + } + + // 对获取到的结果进行HTML实体解码,使显示更友好 + if($link['title']) { + $link['title'] = html_entity_decode($link['title'], ENT_QUOTES | ENT_HTML5, 'UTF-8'); + } + if($link['description']) { + $link['description'] = html_entity_decode($link['description'], ENT_QUOTES | ENT_HTML5, 'UTF-8'); + } + + // 步骤 7: 按指定格式返回成功结果 $data = [ - 'code' => 0, - 'data' => $link + 'code' => 0, + 'data' => $link ]; exit(json_encode($data)); } @@ -1611,6 +1737,23 @@ class Api { $this->return_json(200,$theme_config,""); } + + // 获取设置的主题 + public function get_themes() { + $theme = $this->db->get("on_options","value",[ + "key" => "s_themes" + ]); + // 字符串转换为数组 + $theme = json_decode($theme, true); + //如果主题不存在,则返回默认主题 + if( empty($theme) ) { + $theme = [ + "pc_theme" => "default2", + "mobile_theme" => "default2" + ]; + } + $this->return_json(200,$theme,""); + } /** * 通用json消息返回 */ diff --git a/controller/api.php b/controller/api.php index dd89994..d8193e7 100755 --- a/controller/api.php +++ b/controller/api.php @@ -324,8 +324,8 @@ function exe_sql($api) { //设置options表 function set_theme($api) { - $key = 'theme'; - $value = htmlspecialchars($_POST['value']); + $key = 's_themes'; + $value = $_POST['value']; $api->set_option($key,$value); } diff --git a/controller/index.php b/controller/index.php index e6f97ba..c6793c2 100755 --- a/controller/index.php +++ b/controller/index.php @@ -204,10 +204,36 @@ else{ // 载入前台首页模板 -//查询主题设置 -$template = $db->get("on_options","value",[ - "key" => "theme" +//查询用户设置的主题,区分PC和手机 +$templates = $db->get("on_options","value",[ + "key" => "s_themes" ]); +// 获取UA +$userAgent = $_SERVER['HTTP_USER_AGENT']; +$mobileKeywords = [ + 'mobile', 'android', 'iphone' +]; + +// 如果查询结果是空的 +if (empty($templates)) { + // 设置默认主题 + $template = 'default2'; +} else { + // 不为空,则根据情况使用不同主题 + foreach ($mobileKeywords as $keyword) { + if (stripos($userAgent, $keyword) !== false) { + // 设置主题 + $template = json_decode($templates)->mobile_theme; + break; + } + else{ + // 设置主题 + $template = json_decode($templates)->pc_theme; + } + } +} + + //获取用户传递的主题参数 $theme = trim( @$_GET['theme'] ); //如果用户传递了主题参数 diff --git a/data/update.log b/data/update.log index 002baf6..c347bab 100755 --- a/data/update.log +++ b/data/update.log @@ -1,3 +1,9 @@ +2025.07.07 +1. 修复说明文件中的错别字 +2. 去掉顶部的技术支持 +3. 进一步优化了链接识别功能,提高成功率 +4. 可以单独设置PC和手机主题 + 2025.05.15 1. 【后台 - 分类列表】,添加了添加分类按钮 2. 删除分类时,如果下面存在子分类,则不允许删除 diff --git a/templates/admin/add_link.php b/templates/admin/add_link.php index d4fa317..cd050ff 100755 --- a/templates/admin/add_link.php +++ b/templates/admin/add_link.php @@ -8,7 +8,7 @@
1. 权重越大,排序越靠前
-2. 识别功能可以自动获取链接标题和描述信息,但不确保一定成功
+2. 识别功能可以自动获取链接标题和描述信息,该功能处于测试阶段,不确保一定成功
3. 仅 default2/5iux/heimdall/tushan2/webstack 支持自定义图标,其余主题均自动获取链接图标。