Я хочу условно выводить HTML для генерации страницы, поэтому какой самый простой способ эха многострочных фрагментов HTML в PHP 4+? Нужно ли мне использовать фреймворк шаблонов, например, Smarty?
echo '<html>', "\n"; // Я уверен, что есть лучший способ!
echo '<head>', "\n";
echo '</head>', "\n";
echo '<body>', "\n";
echo '</body>', "\n";
echo '</html>', "\n";
Ответ 1
Существует несколько способов эхо-выражения HTML в PHP.
Между тегами PHP:
<?php if(condition){ ?>
<!-- HTML здесь -->
<?php } ?>
Heredocs.
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 они доступны, независимо от настроек.
Используя эхо:
if(condition){
echo "HTML здесь";
}
При использовании эха, если вы хотите использовать двойные кавычки в HTML, вы должны использовать эхо в одинарных кавычках, как показано ниже:
echo '<input type="text">';
Или вы можете избежать этого так:
echo "<input type=\"text\">";
Ответ 2
Попробуйте сделать это следующим образом (синтаксис heredoc):
$variable = <<<XYZ
<html>
<body>
</body>
</html>
XYZ;
echo $variable;
Ответ 3
Вы можете использовать альтернативный синтаксис. Альтернативный синтаксис для управляющих структур PHP:
<?php if ($something): ?>
<some /> <tags /> <etc />
<?=$shortButControversialWayOfPrintingAVariable ?>
<?php /* Комментарий не виден в HTML */ ?>
<?php else: ?>
<!-- else -->
<?php endif; ?>
Ответ 4
В принципе, вы можете размещать HTML в любом месте вне тегов PHP. Также очень полезно выполнять всю необходимую обработку данных перед их отображением, чтобы разделить логику и представление. Само отображение данных может находиться в нижней части того же PHP-файла, или вы можете включить отдельный PHP-файл, состоящий в основном из HTML.
Я предпочитаю этот компактный стиль:
<?php
/* делайте свою обработку здесь */
?>
<html>
<head>
<title><?=$title?></title>
</head>
<body>
<?php foreach ( $something as $item ) : ?>
<p><?=$item?></p>
<?php endforeach; ?>
</body>
</html>
ПРИМЕЧАНИЕ: в зависимости от настройки PHP, вам может понадобиться использовать <?php echo $var; ?> вместо <?=$var?>.
Ответ 5
Другой подход — поместить 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, перехватывать его, а затем снова писать, но это означает, что вы можете делать все виды форматирования (heredoc и т. д.) и проверять правильность вывода без проблем, связанных с шаблоном страницы (CMS Joomla делает это именно так, BTW).
<?php
ob_start();
echo('Hello, World!');
$php_output = ob_get_contents();
ob_end_clean();
?>
<h1>На странице моего шаблона написано </h1>
<?php
echo($php_output);
?>
<hr>
Нижний колонтитул шаблона
Ответ 6
В дополнение к предыдущему ответу: если вам все равно нужно использовать echo, но вы хотите сохранить простоту и структуру и не хотите захламлять код <?php stuff; ?>, вы можете использовать следующий синтаксис. Например, вы хотите отобразить изображения галереи:
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 принимает несколько параметров, поэтому при хорошем отступе он выглядит довольно приемлемо. Кроме того, использование echo с параметрами более эффективно, чем конкатенация.
Web