Web

Как передать HTML эхом в PHP

Я хочу условно выводить 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.

  1. Между тегами PHP:

<?php if(condition){ ?>

     <!-- HTML здесь -->

<?php } ?>

  1. Heredocs.

  2. 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 они доступны, независимо от настроек.

  1. Используя эхо:

    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

Заголовки запросов Cross-Origin (CORS) с заголовками PHP

Web

Самый простой способ профилировать PHP-скрипт

Web

Как я могу добавить динамически созданный URL-адрес в переменную PHP?

Что такое Флаттер от Google, как им пользоваться и зачем он создан?
Web

Что такое Флаттер от Google, как им пользоваться и зачем он создан?