我正在开发一个问答网站。每个答案旁边都有一个“选择最佳答案”按钮,该按钮应该对提问者可见,但对其他观众应该是不可见的。网页的其他部分几乎相同。那么我该如何编码这个网页呢?我应该每次检查查看者身份以确定该按钮是否应该可见。如果问题有很多答案,除了提问者之外,观众中隐藏着许多按钮。这种编码是否会浪费大量额外带宽?我认为这种编码有点可疑。有没有更好的方法呢?
“添加评论”按钮也存在同样的问题。在下方有一个“添加评论”按钮和一个隐藏的<form><textarea></textarea></form>
,如果有20个答案,则会有20个隐藏<form></form>
,隐藏的代码会大大增加HTML文件的大小。有一种优雅的方式吗?
对于“添加评论”按钮,任何登录的用户都可以添加评论,因此没有身份差异。那么如何处理这个问题?
答案 0 :(得分:5)
这种类型的东西不是浪费带宽,不是。是的,如果目前正在查看该页面的用户可以使用这些控件,那么您应该只在页面上包含这些控件,因此请务必检查您登录的用户(如果他们已登录)用户是谁以及他们的关系是什么他们正在查看的项目。
这可以很简单:
if ($current_user_id == $question_asker_id) {
// show 'accept as best answer' form
}
在允许对任何内容进行任何更改之前,请务必检查服务器端的表单数据。
答案 1 :(得分:5)
你不应该隐藏 HTML,你应该不包含 HTML。即在服务器上,你正在做这样的事情:
if ($loggedIn && $user == 'asker') { // pseudocode
echo acceptButton(); // outputs the HTML for the button
}
非提问者用户甚至不会在浏览器中收到接受按钮的HTML。
答案 2 :(得分:2)
我是否应该每次检查查看者身份以确定该按钮是否可见。
是,检查然后不显示按钮。此外,您还应该检查按钮被按下后,一旦您处理该动作,它就不是提出它的提问者,因为这很容易被滥用。
答案 3 :(得分:1)
如果你关注20个占用大量空间的小型表格(提示,它们没有,大多数服务器压缩它们的输出,所以额外的表单几乎被压缩掉了),只需使用简单的链接。
对于隐藏只是使用if测试,你应该检查用户的身份来执行此操作。这个单一if语句的开销(即使运行了20次)几乎为零。
“过早优化是所有邪恶的根源” - 学习这一点,活下去。
执行此操作的“优雅”方式是(伪代码):
foreach($answers as $answer)
{
// Print answer here
if($current_user == $question_asker)
{
echo "button form here";
}
echo "comment form here";
}