В PHP я использую оператор if
чтобы определить, вошел ли пользователь в систему или нет, и в зависимости от результата отображает главное меню (если оно зарегистрировано) или сообщение «вам нужно войти», если нет. Я делаю это так:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <link rel="stylesheet" href="style.css" type="text/css" /> <title>Home</title> </head> <body> <div id="header"> <a href="index.php"><img src="wtcdblogo.png" alt="WTC DB logo" /></a> </div> <?php if($_SESSION['loggedIn'] == 1) { echo "<div id='main'>MAIN MENU stuff goes here</div>"; } else { echo "<div id='main'>Please login...</div>"; } ?> </body> </html>
Как вы можете видеть, код, отображающий главное меню или сообщение «пожалуйста, войдите», генерируется echo
. Это плохая практика, возможно, есть лучший способ?
Кстати, я вырезал большую часть HTML из echo
в моем фрагменте выше. Главное меню составлено из списка, но я не беспокоился о том, что, поскольку это не имеет отношения к вопросу, я думаю.
Я считаю, что это плохая практика. Не уверен, что кто-то еще думает. С одной стороны, это выглядит ужасно в текстовых редакторах с подсветкой синтаксиса, тогда вам нужно беспокоиться об экранированных строках и т. Д.
Вот как я это делаю:
<div> <? if ($_SESSION['loggedIn'] === 1): ?> <div id="main">Main Menu stuff goes here</div> <? else: ?> <div id="main">Please log in...</div> <? endif ?> </div>
Вы можете прыгать с PHP-тегов и использовать HTML-код прямо. Есть плюсы и минусы делать это таким образом. Мне нравится это лучше, чем эхо. Другие варианты состоят в том, чтобы сделать новые взгляды в этих областях на основе результатов операторов if. Много возможностей, но выше всего лишь один из способов сделать это немного чище и (я думаю) лучше.
Нет ничего плохого в том, что echo для html используется при умеренности. Просто не используйте его для длинных многострочных блоков. Вы всегда будете в конечном итоге с некоторой уродливой конструкцией, требующей экранирования и еще чего-то, что делает вещи еще более уродливыми для чтения.
Если выводимый html-файл является «статическим» (никаких переменных для вставки), тогда рассмотрите возможность выхода из режима php ( ?>
) И просто сброс html как есть. Если вам нужно вставить переменные, тогда рассмотрите использование HEREDOC , которые действуют как строка с двумя кавычками, но без кавычек.
Почему бы не написать так?
<?php if($_SESSION['loggedIn'] == 1): ?> <div id='main'>MAIN MENU stuff goes here</div> <?php else: ?> <div id='main'>Please login...</div> <?php endif; ?>
Использование альтернативных структур управления отделяет вашу разметку от кода немного больше.
<?php if (condition) { ?> <div> some stuff </div> <?php } ?>
Красота PHP заключается в том, что вы можете это сделать.
Если ваш проект приближается к разумным размерам, по существу нет никакого способа обойти чистое разделение презентационных элементов и логики программ только ради удобства и масштабируемости. Так что вы делаете в своем текущем коде, это не имеет большого значения; в конечном счете, вы должны задуматься о чистом дизайне с самого начала.
Существует много существующих решений, обычно включающих в себя какие-то шаблоны макета, которые загружаются кодом.
Нет истинной «лучшей практики», хотя некоторые утверждают, что предпочитают то или иное. В идеале, если вы отделяете HTML от PHP, вы изолируете бэкэнд приложения от внешнего интерфейса, что упрощает его чтение, изменение и поддержку.
Что касается вашего кода, я могу изменить его, чтобы он был более кратким (в зависимости от того, что вы подразумеваете под «MAIN MENU stuff …», я бы пересмотрел это редактирование):
<div id="main"> <?= ($_SESSION['loggedIn'] == 1) ? 'MAIN MENU stuff goes here' : 'Please login...'; ?> </div>
Некоторые считают, что это плохая практика, это правда. Мне нравится не использовать эхо. Если вы сделаете это так, тем более ясны редакторы, такие как Dreamweaver, что вы хотите и получите все преимущества автозаполнения.
<?php if ($loggedin) { ?> Thank you for being logged in. <hr> <?php } else { ?> Please <a href='login.php'>login</a> <?php } ?>