Jak mogę powtórzyć HTML w PHP?


122

Chcę warunkowo wyprowadzać kod HTML w celu wygenerowania strony, więc jaki jest najłatwiejszy sposób na wyświetlenie wielowierszowego fragmentu kodu HTML w PHP 4+? Czy musiałbym używać struktury szablonu, takiej jak 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 nie działa w formacie HTML. Chyba miałeś na myśli echo „<br>”;
Weishi Zeng

Dobra praktyka mówi, aby oddzielić logikę od widoku (jak w MVC). użyj silnika templetig, takiego jak Twig, aby oddzielić widok od logiki skryptu - twig.sensiolabs.org Po zaimplementowaniu znaczników html do skryptu php zrób to na odwrót. Zaimplementuj zmienne php do świątyni twig. Jak tylko zrozumiesz to, co mam na myśli, zobaczysz korzyści płynące z tego podejścia. Twig rozwiązuje tego typu problemy. Dla małego kawałka kodu możesz napisać własne rozszerzenie gałązki, którego możesz następnie użyć w kilku sekundach do wykonania skomplikowanych, ale powtarzalnych zadań.
DevWL,

Odpowiedzi:


270

Istnieje kilka sposobów odzwierciedlenia HTML w PHP.

1. Pomiędzy tagami PHP

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

2. W echu

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

W przypadku echa, jeśli chcesz używać podwójnych cudzysłowów w swoim kodzie HTML, musisz użyć pojedynczych cudzysłowów, takich jak:

echo '<input type="text">';

Lub możesz uciec im w ten sposób:

echo "<input type=\"text\">";

3. Heredocs

4. Nowdocs (od PHP 5.3.0)

Silniki szablonów są używane do używania PHP w dokumentach zawierających głównie HTML. W rzeczywistości pierwotnym celem PHP było bycie językiem szablonów. Dlatego w PHP możesz używać takich rzeczy, jak krótkie znaczniki, aby wyświetlać zmienne (np<?=$someVariable?> .).

Istnieją inne silniki szablonów (takie jak Smarty, Twig itp.), Które sprawiają, że składnia jest jeszcze bardziej zwięzła (np {{someVariable}} .).

Podstawową zaletą korzystania z silnika szablonów jest oddzielenie projektu ( logiki prezentacji ) od kodowania ( logika biznesowa ). Sprawia również, że kod jest czystszy i łatwiejszy w utrzymaniu na dłuższą metę.

Jeśli masz więcej pytań, zostaw komentarz.

Więcej informacji na ten temat można znaleźć w dokumentacji PHP .


UWAGA: Krótkie tagi PHP <?i ?>są odradzane, ponieważ są dostępne tylko wtedy, gdy są włączone za pomocą short_open_tagdyrektywy pliku konfiguracyjnego php.ini lub jeśli PHP zostało skonfigurowane z --enable-short-tagsopcją. Są dostępne niezależnie od ustawień od 5.4 wzwyż .


7
Czy „/ * HTML tutaj * /” NAPRAWDĘ nie powinien być „<! - HTML tutaj ->”? ;)
Jeremy Logan

Tak, w pierwszym poście masz rację. Zostałem złapany w kod haha. Dziękuję Ci.
Chris Bier,

1
Dzięki, @Chris B., pomogło mi. W przypadku ech, jeśli chcesz używać podwójnych cudzysłowów w swoim kodzie HTML, musisz użyć pojedynczych cudzysłowów w ten sposób: brakowało mi tego.
Ayush Mishra

1
Ten pierwszy link w odpowiedzi został usunięty :(
mcon

Właściwie jedynymi krótkimi tagami dostępnymi od wersji 5.4 są krótkie tagi echa <?=$var?>. Krótkie tagi są jak zwykle odradzane i należy je usunąć ( <? doStuff() ?>).
igorsantos 07

65

Spróbuj tak ( składnia heredoc ):

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

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

8
@MhdSyrwan to tylko losowe znaki, więcej możesz przeczytać tutaj php.net/manual/en/ ...
lfx

1
Możesz rozwinąć temat? Nie widzę otwierających ani zamykających nawiasów PHP, ale zarówno HTML, jak i PHP, co? - link działa i odpowiada na to lepiej, ale może wtedy powinien być w tekście odpowiedzi, a nie w komentarzach?
Julix

@Julix oczywiście musisz dodać otwierające i ( zależy ) zamykające tagi PHP. Chciał tylko, żeby przykład był krótki.
Fahmi,

Mam to; jakoś przeoczyłem tę składnię heredocs (czyli cały kod to php). Byłem zdezorientowany, ponieważ byłem wtedy nowy w PHP i zwykłem widzieć składnię w stylu <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- Więc pomyślałem, że brakuje kilku nawiasów i nie byłem pewien, gdzie dokładnie one pójdą. Zawsze jest zabawnie, kiedy ktoś odpowiada na moje nieco starsze komentarze, ponieważ byłam wtedy bardzo nowa.
Julix,

30

Możesz użyć alternatywnej składni alternatywnej składni dla struktur kontrolnych i wyrwać się z 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: To prawdopodobnie najlepszy, najbardziej bezpośredni sposób, zakładając, że nie szukasz czegoś więcej ... Szukasz czegoś więcej?
Frank V,

1
Tak, w szczególności możliwość używania komentarzy PHP pomiędzy HTML, komentarzami, które nie będą wyświetlane.
TheFlash,

15

Zasadniczo możesz umieścić HTML w dowolnym miejscu poza tagami PHP. Bardzo korzystne jest również przetworzenie wszystkich niezbędnych danych przed wyświetleniem jakichkolwiek danych, aby oddzielić logikę od prezentacji.

Sam wyświetlacz danych może znajdować się na dole tego samego pliku PHP lub możesz dołączyć oddzielny plik PHP składający się głównie z HTML.

Wolę ten kompaktowy styl:

<?php
    /* do your processing here */
?>

<html>
<head>
    <title><?=$title?></title>
</head>
<body>
    <?php foreach ( $something as $item ) : ?>
        <p><?=$item?></p>
    <?php endforeach; ?>
</body>
</html>

Uwaga: może być konieczne użycie <?php echo $var; ?>zamiast w <?=$var?>zależności od konfiguracji PHP.


7

Jestem stronniczy w tym stylu:

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

Używam tagów w stylu ASP, tak. Połączenie PHP i HTML wygląda na bardzo czytelne dla moich oczu. Chodzi o to, aby znaczniki <%i były %>prawidłowe.


Czy tagi ASP są zgodne z PHP 4+?
TheFlash,

4
Tak, ale zdobądź je, dopóki trwają - są usuwane z PHP (nie wiem, która wersja ... jeśli jeszcze nie poszły)
Greg

7

Innym podejściem jest umieszczenie kodu HTML w osobnym pliku i zaznaczenie obszaru do zmiany za pomocą symbolu zastępczego [[treść]] w tym przypadku. (Możesz także użyć sprintf zamiast str_replace.)

$page = 'Hello, World!';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]', $content, $page);
echo($pagecontent);

Alternatywnie, możesz po prostu wyprowadzić wszystkie rzeczy PHP na ekran przechwycony w buforze, napisać HTML i umieścić wynik PHP z powrotem na stronie.

Może wydawać się dziwne, aby wypisać PHP, złapać go, a następnie napisać ponownie, ale oznacza to, że możesz robić różne rzeczy formatujące ( heredoc itp.) I testować poprawnie wyjście bez kłopotów ze stroną szablon przeszkadza. (Tak przy okazji, CMS Joomla robi to w ten sposób).

To znaczy:

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

Po prostu użyj funkcji print, aby wyświetlić tekst w pliku PHP w następujący sposób:

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

Oprócz odpowiedzi Chrisa B , jeśli i tak musisz użyć echo, nadal chcesz, aby był prosty i uporządkowany i nie chcesz spamować kodu<?php stuff; ?> , możesz użyć poniższej składni.

Na przykład chcesz wyświetlić obrazy galerii:

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 przyjmuje wiele parametrów, więc przy dobrym wcięciu wygląda całkiem nieźle. Używanie echoz parametrami jest bardziej efektywne niż łączenie.


1
echo '
<html>
<body>
</body>
</html>
';

lub

echo "<html>\n<body>\n</body>\n</html>\n";


0

Nie odbijaj kodu HTML.

Jeśli chcesz użyć

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

powinieneś to zrobić:

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

-1

Oto jak to robię:

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

Nie jestem pewien, dlaczego twoja odpowiedź została specjalnie przegłosowana, kiedy ktoś napisał prawie identyczną odpowiedź w tym samym wątku i otrzymał 30 głosów za. Jest to jednak całkowicie poprawna składnia. Przepełnienie stosu czasami nie ma sensu ...
przyjaciel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.