后台新增「搜索与链接的打开方式」,并让站点链接跟随设置

原先的设置项只作用于顶部搜索框,文案也写作「搜索结果新窗口打开」;而站点格
与合集里的链接 target 是写死的 _blank —— 于是切到「当前页面打开」时会出现
半生效:搜索留在本页,点网站却仍然弹新标签。

- index.php:把打开方式收敛成一个 open_target(),搜索框与所有站点格共用同一
  来源,任何一处都不再写死 target;页面输出 data-open="blank|self" 便于断言与排查。
- admin/index.php:后台由含义含糊的复选框改为明确的二选一(新标签页 / 当前页面),
  并补一段说明它管哪两处、不影响后台管理界面。
- admin/actions.php:保存走白名单回退 —— '0' 之外(含字段缺失、被篡改成怪值)
  一律回到 '1'(新标签页)。默认值与改造前的旧行为一致,老库不受影响。
- 当前页面模式下不再输出无意义的 rel="noopener"。

验证:php -l 4 个文件通过;e2e 113/113(新增 20 项,并做了反向验证——把链接
改回写死 _blank 后,相关断言精确失败 4 条);线上部署 0 FAIL(双版本语法检查、
62 条静态断言、38 文件哈希逐字节一致、HTTP 冒烟、真机上切换两种模式并已复原)。
This commit is contained in:
2026-09-28 19:28:57 +08:00
parent 273074218c
commit 47b45cfa23
4 changed files with 35 additions and 5 deletions
+4 -1
View File
@@ -213,12 +213,15 @@ try {
$src = in_array($srcRaw, ['auto', 'baidu', 'bing', 'so360'], true) ? $srcRaw : 'baidu';
// 合集区显示方式:flat = 全部平铺;其余一律回到 tabs(标签页折叠)
$coll = (string)($_POST['collections_layout'] ?? 'tabs') === 'flat' ? 'flat' : 'tabs';
// 打开方式:'0' = 当前页面;其余(含字段缺失、被篡改成怪值)一律回到 '1'(新标签页)
// ——默认必须等于改造前的旧行为,这样老库里已有的值上线后不会突然变样。
$open = (string)($_POST['open_blank'] ?? '1') === '0' ? '0' : '1';
$map = [
'site_name' => trim((string)($_POST['site_name'] ?? '')),
'subtitle' => trim((string)($_POST['subtitle'] ?? '')),
'default_engine' => preg_replace('/[^a-z0-9\-_]/i', '', (string)($_POST['default_engine'] ?? '')),
'primary_color' => preg_match('/^#[0-9a-fA-F]{3,8}$/', (string)($_POST['primary_color'] ?? '')) ? $_POST['primary_color'] : '#2F6BF7',
'open_blank' => isset($_POST['open_blank']) ? '1' : '0',
'open_blank' => $open,
'icon_services' => isset($_POST['icon_services']) ? '1' : '0',
'suggest_source' => $src,
'collections_layout' => $coll,