Элегантное кодирование, как бороться со скрытым / невидимым HTML-кодом?
Я занимаюсь разработкой сайта вопросов и ответов. Помимо каждого ответа есть кнопка "Выбрать как лучший ответ", эта кнопка должна быть видимой для спрашивающего, но должна быть невидимой для других зрителей. Другая часть веб-страницы почти такая же. Так как я могу кодировать эту веб-страницу? Должен ли я проверять личность зрителя каждый раз, чтобы определить, должна ли кнопка быть видимой или нет. Если есть много ответов на вопрос, есть много кнопок, скрытых от зрителей, кроме спрашивающего. Этот тип кодирования тратит много лишней полосы пропускания? И я думаю, что этот вид кодирования немного подозрительный. Есть ли лучший способ сделать это?
Та же проблема касается кнопки "Добавить комментарий". Справа внизу есть кнопка "Добавить комментарий" и скрытый <form><textarea></textarea></form>
, если есть 20 ответов, будет 20 скрытых <form></form>
, скрытый код значительно увеличивает размер файла HTML. Есть ли элегантный способ вместо этого?
Что касается кнопки "Добавить комментарий", то любой зарегистрированный пользователь может добавить комментарий, поэтому нет различий в идентичности. Так как же решить проблему?
4 ответа
Если вам нужно, чтобы 20 второстепенных форм занимали много места (подсказка, они этого не делают, большинство серверов сжимают свои выходные данные, поэтому дополнительные формы в значительной степени сжимаются), просто используйте простые ссылки.
Для сокрытия просто используйте тесты if, и вы должны проверить личность пользователя, чтобы сделать это. Издержки этого единственного оператора if (даже если он запускался 20 раз) практически равны нулю.
"Преждевременная оптимизация - корень всего зла" - учитесь этому, живите этим.
"Элегантный" способ сделать это (псевдокод):
foreach($answers as $answer)
{
// Print answer here
if($current_user == $question_asker)
{
echo "button form here";
}
echo "comment form here";
}
Вы не должны скрывать HTML, вы не должны включать HTML. Т.е. на сервере вы делаете что-то вроде этого:
if ($loggedIn && $user == 'asker') { // pseudocode
echo acceptButton(); // outputs the HTML for the button
}
Пользователи, не являющиеся пользователями, даже не получат HTML-код кнопки подтверждения в своем браузере.
Этот тип вещей не трата пропускной способности, нет. И да, вы должны включать эти элементы управления на страницу только в том случае, если они доступны для пользователя, просматривающего страницу в данный момент, поэтому обязательно проверьте, кто является вашим вошедшим (если он вошел в систему) пользователем и каковы их отношения. на предмет, который они просматривают.
Это может быть так просто, как:
if ($current_user_id == $question_asker_id) {
// show 'accept as best answer' form
}
Обязательно проверьте данные формы на стороне сервера, прежде чем разрешать какие-либо изменения.
Должен ли я проверять личность зрителя каждый раз, чтобы определить, должна ли кнопка быть видимой или нет.
Да, проверьте, а затем не показывайте кнопку. Кроме того, вы должны также проверить, как только кнопка нажата, и когда вы обрабатываете это действие, не инициатор его инициировал, потому что им легко злоупотреблять.