Як я можу повторювати 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 до скроневого скроня. Як тільки ви отримаєте те, що я маю на увазі, ви побачите переваги цього заходу. Гілочка вирішує подібні питання. Для невеликого ченка коду ви можете написати власне розширення гілочок, яке ви зможете потім використовувати в секундах для виконання деяких складних, але повторюваних завдань.
DevWL

Відповіді:


269

Існує кілька способів відлучити 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. Гередоки

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 і далі .


7
Чи не повинен "/ * HTML тут * /" дійсно бути "<! - HTML тут ->"? ;)
Джеремі Логан

Так, у першій публікації ви маєте рацію. Мене наздогнали коди ха-ха. Дякую.
Кріс Бір

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, звичайно, потрібно додати відкриття та ( залежно ) закриття тегів PHP. Він просто хотів зробити приклад коротким.
Фахмі

Зрозумів; я якось пропустив це синтаксис heredocs (тобто весь код - php). Я заплутався, оскільки в той час я був новинкою в PHP і звик бачити синтаксис на зразок <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- Тому я подумав, що купа дужок відсутня, і не знаю, куди саме вони поїдуть. Це завжди смішно, коли мої трохи старші коментарі отримують відповідь, оскільки я тоді був дуже новим у цьому.
Джулікс

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

@Jeremy: Це, мабуть, найкращий, найпряміший спосіб припустити, що ти не шукаєш чогось більшого ... Шукаєш щось більше?
Франк V

1
Так, зокрема можливість використання коментарів PHP між HTML, коментарями, які не будуть лунати.
TheFlash

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

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 робить це так, BTW.)

Тобто:

<?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 } ?>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.