Как я могу повторить HTML в PHP?


122

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

2
\ n не работает в HTML. Я полагаю, вы имели в виду эхо "<br>";
Weishi Zeng

Хорошая практика говорит, что нужно отделить вашу логику от представления (как в MVC). используйте механизм Templetig, например Twig, чтобы отделить ваше представление от логики скрипта - twig.sensiolabs.org Если вы хотите реализовать разметку html в скрипте php, сделайте это наоборот. Внедрите переменные php в храм ветки. Как только вы поймете, что я имею в виду, вы увидите преимущества этого подхода. Twig решает такие проблемы. Для небольшого фрагмента кода вы можете написать собственное расширение ветки, которое затем можно будет использовать через несколько секунд для выполнения некоторых сложных, но повторяющихся задач.
DevWL

Ответы:


270

Есть несколько способов повторить HTML в PHP.

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

<?php if(condition){ ?>
     <!-- HTML here -->
<?php } ?>

2. В эхо

if(condition){
     echo "HTML here";
}

С эхом, если вы хотите использовать двойные кавычки в вашем 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_tagphp.ini директивы файла конфигурации, или если PHP был сконфигурирован с --enable-short-tagsопцией. Они доступны независимо от настроек начиная с 5.4 .


7
Разве "/ * HTML здесь * /" ДЕЙСТВИТЕЛЬНО не должен быть "<! - HTML here ->"? ;)
Джереми Логан

Да по первому посту вы правы. Я попал в ловушку кода, ха-ха. Спасибо.
Крис Бир

1
Спасибо, @Chris B., мне это помогло. С эхом, если вы хотите использовать двойные кавычки в своем HTML, вы должны использовать эхо в одинарные кавычки, например: Мне это действительно не хватало.
Аюш Мишра

1
Эта первая ссылка в ответе теперь удалена :(
mcon

Фактически, единственные короткие теги, доступные с версии 5.4 и выше, - это короткие эхо-теги <?=$var?>. Использование коротких тегов, как обычно, не рекомендуется, и их следует удалить ( <? doStuff() ?>).
igorsantos07,

65

Попробуйте это так ( синтаксис heredoc ):

$variable = <<<XYZ
<html>
<body>

</body>
</html>
XYZ;
echo $variable;

8
@MhdSyrwan просто случайные символы, вы можете прочитать здесь php.net/manual/en/...
LFX

1
заботиться о разработке? Я не вижу открывающих или закрывающих скобок PHP, но и HTML, и PHP, так? - ссылка работает и отвечает лучше, но, может быть, тогда она должна быть в тексте ответа, а не в комментариях?
Julix

@Julix, конечно, вам нужно добавить открывающие и ( зависит ) закрывающие теги PHP. Он просто хотел сделать пример кратким.
Fahmi

Я понял; почему-то я пропустил, что это был синтаксис heredocs (т.е. весь код - php). Я запутался, так как в то время я был новичком в PHP и привык видеть синтаксис вроде <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- Так что я подумал, что не хватает нескольких скобок, и не был уверен, куда именно они пойдут. Всегда забавно получать ответы на мои чуть более старые комментарии, потому что тогда я был новичком во всем этом.
Julix

30

Вы можете использовать альтернативный синтаксис альтернативного синтаксиса для структур управления и выйти из PHP:

<?php if ($something): ?>
    <some /> <tags /> <etc />
    <?=$shortButControversialWayOfPrintingAVariable ?>
    <?php /* A comment not visible in the HTML, but it is a bit of a pain to write */ ?>
<?php else: ?>
    <!-- else -->
<?php endif; ?>

@ Джереми: Это, вероятно, лучший и самый прямой способ, если вы не ищете чего-то большего ... Вы ищете что-то еще?
Фрэнк V

1
Да, в частности, возможность использовать комментарии PHP между HTML, комментарии, которые не будут отображаться эхом.
TheFlash 08

15

По сути, вы можете размещать 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.


7

Я неравнодушен к этому стилю:

  <html>
    <head>
<%    if (X)
      {
%>      <title>Definitely X</title>
<%    }
      else
      {
%>      <title>Totally not X</title>
<%    }
%>  </head>
  </html>

Да, я использую теги в стиле ASP. На мой взгляд, смешение PHP и HTML выглядит очень легко читаемым. Хитрость заключается в том в получении <%и %>маркеры раз.


Совместимы ли теги ASP с PHP 4+?
TheFlash 08

4
Да, но получите их, пока они существуют - они удаляются из PHP (не уверен, какая версия ... если они еще не вышли)
Грег

7

Другой подход - поместить 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 делает это таким образом, кстати.)

То есть:

<?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

2

Просто используйте функцию печати, чтобы отобразить текст в файле PHP следующим образом:

<?php

  print('
    <div class="wrap">

      <span class="textClass">TESTING</span>

    </div>
  ')
?>

2
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

echo('Echo as HTML' . htmlspecialchars((string)$enter_string));

1

В дополнение к ответу Криса Б. , если вам 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 принимает несколько параметров, поэтому с хорошим отступом выглядит неплохо. Кроме того, использование echoс параметрами более эффективно, чем объединение.




0

Не повторяйте HTML.

Если вы хотите использовать

<?php echo "<h1>  $title; </h1>"; ?>

вы должны делать это:

<h1><?= $title;?></h1>

-1

Вот как я это делаю:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>

Не знаю, почему ваш ответ был отвергнут, когда кто-то написал почти идентичный ответ в этой же ветке и получил 30 положительных голосов. Однако это вполне допустимый синтаксис. Иногда переполнение стека не имеет смысла ...
Друг,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.