Как я могу Эхо HTML в PHP?
Я хочу условно выводить HTML для генерации страницы, так что самый простой способ Эхо многострочных фрагментов HTML в PHP 4+? Нужно ли мне использовать шаблонную структуру, такую как Smarty?
echo '<html>', "n"; // I'm sure there's a better way!
echo '<head>', "n";
echo '</head>', "n";
echo '<body>', "n";
echo '</body>', "n";
echo '</html>', "n";
12 ответов:
есть несколько способов Эхо HTML в PHP.
1. Между тегами PHP
<?php if(condition){ ?> <!-- HTML here --> <?php } ?>
2. В Эхо
if(condition){ echo "HTML here"; }
С echos, если вы хотите использовать двойные кавычки в вашем HTML вы должны использовать одну кавычку Эхо так:
echo '<input type="text">';
или вы можете избежать их вот так:
echo "<input type=\"text\">";
3. Heredocs
4. Nowdocs (начиная с PHP 5.3.0)
двигатели шаблона используются для использования PHP в документы, которые содержат в основном HTML. Фактически, первоначальная цель PHP заключалась в том, чтобы быть шаблонным языком. Вот почему с PHP вы можете использовать такие вещи, как короткие теги для Эхо-переменных (например,
<?=$someVariable?>
).есть и другие шаблонные движки (такие как Smarty, Twig и др.) что делает синтаксис еще более лаконичным (например
{{someVariable}}
).основным преимуществом использования механизма шаблонов является сохранение дизайна (логики представления) отдельно от кодирования (бизнес-логики). Он также делает код чище и проще в обслуживании в долгосрочной перспективе.
если у вас есть еще вопросы, не стесняйтесь оставлять комментарии. Дальнейшее чтение доступно на этих вещах в PHP документации.
Благослови Вас Бог!
Примечание: PHP короткие теги
<?
и?>
Не рекомендуется, потому что они доступны только если включенаshort_open_tag
php.директива файла конфигурации ini, или если PHP был настроен с помощью--enable-short-tags
выбор. они доступны, независимо от настроек от 5.4 и далее.
вы могли бы использовать альтернативный синтаксис альтернативный синтаксис управляющих структур и вырваться из PHP:
<?php if ($something): ?> <some /> <tags /> <etc /> <?=$shortButControversialWayOfPrintingAVariable ?> <?php /* A comment not visible in the HTML but is a bit of a pain to write */ ?> <?php else: ?> <!-- else --> <?php endif; ?>
В основном вы можете поместить HTML в любом месте за пределами тегов PHP. Также очень полезно выполнить всю необходимую обработку данных перед отображением любых данных,чтобы отделить логику и представление.
сам дисплей данных может быть в нижней части того же файла PHP или вы можете включить отдельный файл PHP, состоящий в основном из HTML.
Я предпочитаю этот компактный стиль:
<?php /* do your processing here */ ?> <html> <head> <title><?=$title?></title> </head> <body> <?php foreach ( $something as $item ) : ?> <p><?=$item?></p> <?php endforeach; ?> </body> </html>
Примечание: возможно, вам придется использовать
<?php echo $var; ?>
вместо<?=$var?>
в зависимости от на вашей установке PHP.
я неравнодушен к этому стилю:
<html> <head> <% if (X) { %> <title>Definitely X</title> <% } else { %> <title>Totally not X</title> <% } %> </head> </html>
Я использую теги в стиле ASP, да. Смешивание PHP и HTML выглядит супер-читается в моих глазах. Фокус в том, чтобы получить
<%
и%>
маркеры в самый раз.
другой подход заключается в том, чтобы поместить HTML в отдельный файл и отметить область для изменения с помощью заполнителя [[content]] в этом случае. (Вы также можете использовать sprintf вместо str_replace.)
$page = 'hello world'; $content = file_get_contents('html/welcome.html'); $pagecontent = str_replace('[[content]]',$content,$page); echo($pagecontent);
в качестве альтернативы вы можете просто вывести все php-файлы на экран, захваченный в буфере, затем написать html, а затем вернуть вывод php на страницу.
может показаться странным написать php, поймать его, а затем написать его снова, но это означает, что вы можете сделать всякие форматирования (Heredocs и т. д.), и проверить правильно ли выходы без хлопот шаблон страницы, получать в пути. (Joomla CMS делает это таким образом, кстати) т. е.:
<?php ob_start(); echo('hello world'); $php_output = ob_get_contents(); ob_end_clean(); ?> <h1> My Template page says </h1> <?php echo($php_output ); ?> <hr> template footer
кроме Крис Б ответ, Если вам нужно использовать
echo
в любом случае, все еще хотите сохранить его простым и структурированным и не хотите спамить код с<?php stuff; ?>
's, Вы можете использовать синтаксис ниже.например, вы хотите отобразить изображения галереи:
foreach($images as $image) { echo '<li>', '<a href="', site_url(), 'images/', $image['name'], '">', '<img ', 'class="image" ', 'title="', $image['title'], '" ', 'src="', site_url(), 'images/thumbs/', $image['filename'], '" ', 'alt="', $image['description'], '"', '>', '</a>', '</li>'; }
Эхо принимает несколько параметров, так что с хорошим отступом это выглядит довольно хорошо. Также с помощью
echo
с параметрами является более эффективным, чем сцепление.
не эхо из HTML
Если вы хотите использовать
<?php echo "<h1> $title; </h1>"; ?>
вы должны делать это:
<h1><?= $title;?></h1>
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>'; echo( 'Echo as HTML' . htmlspecialchars( (string)$enter_string ) );