提交成功后改为原地显示回执页(不再跳转);修提交页右侧缺块
用户两个问题:
一、「我要反馈」页面比正常页面窄很多、右侧缺一块
根因:.narrow 只有 max-width:640px,**没有居中**(缺 margin auto)。
在 880px 的内容区里左对齐,右侧空出 240px 白,看起来像页面被抠掉一块。
改法:max-width 放到 720px + margin-left/right auto 居中。
实测:容器 880px,表单 720px,左右间隙各 80px,完全对称。
二、提交完直接跳转太突兀
用户:「应该给它一个提示,说反馈我们已经收到…里面有一个标志码,
是你以后跟踪它的唯一凭据…下面再列出其他功能(返回首页、继续提交、
其他软件链接、开源链接),不能直接跳转,这给人感觉很突兀。」
改法:不再 302 跳转,改为原地渲染成功页 fb_render_submitted():
✓ 您的反馈我们已经收到
→ 详细信息已发送到 xxx@xxx(并提示看垃圾邮件)
→ 醒目的标志码区块(等宽字 + 虚线框 + 可整体选中)
并说明:凭它可查看进度,未通过审核/已关闭也能看;每封邮件也会带
→ 勿外传提醒(等同于身份凭证)
→ 四个去处:查看这条反馈 / 继续提交 / 看该软件其他反馈 / 返回首页
→ 其他软件入口(排除当前软件,避免重复)
→ 开源仓库链接
为什么要把 token 当场亮出来而不只是说已发到邮箱:
邮件可能进垃圾箱或被误删,码亮出来用户至少能复制存档;
这是唯一凭据,丢了找不回来(我们不做登录,不认人)。
验证(只在 feedlitetest 软件里做,不碰其他正式软件):
真实提交一条 → 返回 200 且 URL 仍在 new.php(没跳走);
成功页含回执/邮箱/唯一凭据/勿外传/四个按钮/其他软件/开源链接;
提取到 32 位 hex 标志码,带它访问详情页 200,不带则 404。
测试数据已清理,其他软件数据一条未动。
This commit is contained in:
@@ -169,12 +169,18 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
// 发信失败绝不能让用户提交失败 —— 反馈已经存库了
|
// 发信失败绝不能让用户提交失败 —— 反馈已经存库了
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 提交完成后直接带 token 跳到详情页:
|
/* 提交完成 → 原地渲染「已收到」页面,不跳转。
|
||||||
* 这样用户当场就能看到自己刚提交的那条(哪怕还没审核),
|
*
|
||||||
* 而不是只看到一个「等待审核」的静态提示页。 */
|
* 用户 2026-11-03:「提交完怎么直接跳转到首页去了?应该给它一个提示,
|
||||||
fb_redirect('thread.php?id=' . $newId
|
* 说你反馈我们已经收到…里面有一个标志码,是你以后跟踪它的唯一凭据…
|
||||||
. '&t=' . rawurlencode($trackToken)
|
* 然后下面再列出来其他功能(返回首页、继续提交、其他软件链接、开源链接),
|
||||||
. '&submitted=1');
|
* 不能直接跳转,这给人感觉很突兀。」
|
||||||
|
*
|
||||||
|
* 🔴 关键取舍:**不跳转、不用 302**。跳转会让用户失去"我刚提交成功"这一帧,
|
||||||
|
* 而且详情页此刻还是「未公开」状态,跳过去反而像出错了。
|
||||||
|
* 这里直接把成功页渲染出来,把 token 明明白白摆在眼前。 */
|
||||||
|
fb_render_submitted($sw, $newId, $trackToken, $form, $swList);
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -267,3 +273,102 @@ fb_layout_head('我要反馈', ['robots' => 'noindex,follow', 'software' => $sw]
|
|||||||
|
|
||||||
<?php
|
<?php
|
||||||
fb_layout_foot();
|
fb_layout_foot();
|
||||||
|
|
||||||
|
/* ==================================================================
|
||||||
|
* 提交成功页
|
||||||
|
* ------------------------------------------------------------------
|
||||||
|
* 用户 2026-11-03 要求:提交完不要直接跳走,要给一个明确回执。
|
||||||
|
* 页面结构(按他的话组织):
|
||||||
|
* ① 你的反馈我们已经收到
|
||||||
|
* ② 详细信息已发到你邮箱
|
||||||
|
* ③ 下面这个标志码是**你以后跟踪它的唯一凭据**,请保存好
|
||||||
|
* ④ 我们会尽快处理,你可以凭它持续关注进展
|
||||||
|
* ⑤ 再往下给出路:查看这条反馈 / 继续提交 / 返回列表 / 其他软件 / 开源仓库
|
||||||
|
*
|
||||||
|
* 为什么要显式展示 token(而不只是说"已发到邮箱"):
|
||||||
|
* 邮件可能进垃圾箱、也可能被误删。把码当场亮出来,用户至少能复制存档,
|
||||||
|
* 不至于彻底失去跟踪能力。这是"唯一凭据",丢了就找不回来(我们不认人)。
|
||||||
|
* ================================================================== */
|
||||||
|
function fb_render_submitted($sw, $newId, $token, array $form, array $swList) {
|
||||||
|
$swName = $sw ? (string)$sw['name'] : '';
|
||||||
|
fb_layout_head('反馈已提交', ['robots' => 'noindex,nofollow', 'software' => $sw]);
|
||||||
|
?>
|
||||||
|
<section class="narrow">
|
||||||
|
<div class="submitted">
|
||||||
|
<div class="submitted-ok" aria-hidden="true">✓</div>
|
||||||
|
<h1>您的反馈我们已经收到</h1>
|
||||||
|
|
||||||
|
<p class="submitted-lead">
|
||||||
|
我们已经把这条反馈存下来了,会尽快安排查看与处理。
|
||||||
|
<?php if (trim((string)$form['email']) !== ''): ?>
|
||||||
|
这条反馈的详细信息也已发送到 <b><?php echo e((string)$form['email']); ?></b>,
|
||||||
|
请留意收件箱(如果没看到,可以看一下垃圾邮件)。
|
||||||
|
<?php endif; ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="token-box">
|
||||||
|
<div class="token-box-hd">您跟踪这条反馈的唯一凭据</div>
|
||||||
|
<div class="token-code" id="trackToken"><?php echo e((string)$token); ?></div>
|
||||||
|
<p class="token-box-tip">
|
||||||
|
请把这段标志码保存好。今后凭它就能查看这条反馈的处理进度 ——
|
||||||
|
即使它还没有通过审核、甚至最终被关闭,也依然能看。
|
||||||
|
我们也会在每封通知邮件里带上它,所以务必留意邮箱。
|
||||||
|
</p>
|
||||||
|
<p class="token-box-warn">
|
||||||
|
这段码等同于您的身份凭证:谁拿到它,谁就能查看这条反馈。
|
||||||
|
请不要发给别人,也不要发到公开的地方。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="submitted-next">接下来您可以:</p>
|
||||||
|
<div class="submitted-actions">
|
||||||
|
<a class="btn primary" href="thread.php?id=<?php echo (int)$newId; ?>&t=<?php echo e(rawurlencode((string)$token)); ?>">
|
||||||
|
查看这条反馈
|
||||||
|
</a>
|
||||||
|
<a class="btn" href="new.php<?php echo $sw ? '?sw=' . e(urlencode((string)$sw['slug'])) : ''; ?>">继续提交一条</a>
|
||||||
|
<a class="btn" href="<?php echo e(fb_software_list_url($sw)); ?>">
|
||||||
|
<?php echo $swName !== '' ? '看看「' . e($swName) . '」的其他反馈' : '返回问题列表'; ?>
|
||||||
|
</a>
|
||||||
|
<a class="btn" href="index.php">返回首页</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
/* 其他软件的入口:只列除了当前这个之外的,避免重复 */
|
||||||
|
$others = [];
|
||||||
|
foreach ($swList as $s) {
|
||||||
|
if ($sw && (int)$s['id'] === (int)$sw['id']) { continue; }
|
||||||
|
$others[] = $s;
|
||||||
|
}
|
||||||
|
if ($others):
|
||||||
|
?>
|
||||||
|
<div class="submitted-others">
|
||||||
|
<div class="submitted-others-hd">也可以去其他软件反馈</div>
|
||||||
|
<div class="submitted-others-list">
|
||||||
|
<?php foreach ($others as $s): ?>
|
||||||
|
<?php
|
||||||
|
list($c) = fb_software_colors($s);
|
||||||
|
if ($c === '') { $c = '#0057B8'; }
|
||||||
|
?>
|
||||||
|
<a class="submitted-sw" href="new.php?sw=<?php echo e(urlencode((string)$s['slug'])); ?>"
|
||||||
|
style="--swc:<?php echo e($c); ?>">
|
||||||
|
<?php echo fb_software_chip($s); ?>
|
||||||
|
<span class="submitted-sw-go">去反馈 →</span>
|
||||||
|
</a>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$creditUrl = (string)fb_cfg('footer.credit_url', fb_credit_url_default());
|
||||||
|
if ($creditUrl !== ''):
|
||||||
|
?>
|
||||||
|
<p class="submitted-credit">
|
||||||
|
这套反馈系统是开源的:<a href="<?php echo e($creditUrl); ?>" target="_blank" rel="noopener"><?php echo e($creditUrl); ?></a>
|
||||||
|
</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<?php
|
||||||
|
fb_layout_foot();
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user