后台新增「搜索与链接的打开方式」,并让站点链接跟随设置
原先的设置项只作用于顶部搜索框,文案也写作「搜索结果新窗口打开」;而站点格 与合集里的链接 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:
@@ -21,6 +21,17 @@ $engines = $pdo->query("SELECT * FROM engines WHERE is_active=1 ORDER BY sort
|
||||
// flat = 全部平铺 —— 每个合集各占一块,一眼看全、不用点
|
||||
$collLayout = setting('collections_layout', 'tabs') === 'flat' ? 'flat' : 'tabs';
|
||||
|
||||
/** 站点链接与顶部搜索框的打开方式(后台「设置 → 打开方式」)
|
||||
* 返回 `_blank`(新标签页,默认,等同改造前的旧行为)或 `_self`(当前页面)。
|
||||
* ⚠️ 搜索框与站点格必须共用这一个来源,不要在任何一处写死 target。 */
|
||||
function open_target(): string
|
||||
{
|
||||
return setting('open_blank', '1') === '1' ? '_blank' : '_self';
|
||||
}
|
||||
|
||||
$openTarget = open_target();
|
||||
$openMode = $openTarget === '_blank' ? 'blank' : 'self';
|
||||
|
||||
// 默认引擎
|
||||
$defSlug = setting('default_engine', 'bing');
|
||||
$default = null;
|
||||
@@ -48,9 +59,11 @@ function site_tile(array $s): void
|
||||
{
|
||||
$label = site_label($s);
|
||||
$src = icon_src($s['icon']);
|
||||
// 打开方式与顶部搜索框同源(见 open_target()):新标签页 or 当前页面
|
||||
$tgt = open_target();
|
||||
?>
|
||||
<li class="site">
|
||||
<a href="<?= e($s['url']) ?>" target="_blank" rel="noopener" title="<?= e($s['name'] ?: $label) ?>">
|
||||
<a href="<?= e($s['url']) ?>" target="<?= e($tgt) ?>"<?= $tgt === '_blank' ? ' rel="noopener"' : '' ?> title="<?= e($s['name'] ?: $label) ?>">
|
||||
<?php if ($src): ?>
|
||||
<img class="icon" src="<?= e($src) ?>" alt="" loading="lazy">
|
||||
<?php else: ?>
|
||||
@@ -80,7 +93,7 @@ function site_tile(array $s): void
|
||||
<style>:root { --primary: <?= e($primary) ?>; }</style>
|
||||
<?php endif; ?>
|
||||
</head>
|
||||
<body>
|
||||
<body data-open="<?= e($openMode) ?>">
|
||||
<div class="container">
|
||||
|
||||
<!-- 顶部品牌区 -->
|
||||
@@ -108,7 +121,7 @@ function site_tile(array $s): void
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<form id="search-form" action="<?= e($default['search_url'] ?? 'https://cn.bing.com/search') ?>" method="get" target="<?= setting('open_blank', '1') === '1' ? '_blank' : '_self' ?>" rel="noopener"
|
||||
<form id="search-form" action="<?= e($default['search_url'] ?? 'https://cn.bing.com/search') ?>" method="get" target="<?= e($openTarget) ?>"<?= $openTarget === '_blank' ? ' rel="noopener"' : '' ?>
|
||||
data-slug="<?= e($default['slug'] ?? '') ?>">
|
||||
<input type="text" id="search-text" name="<?= e($default['param'] ?? 'q') ?>"
|
||||
placeholder="<?= e(($default['name'] ?? '搜索') . '搜索') ?>" autocomplete="off">
|
||||
|
||||
Reference in New Issue
Block a user