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";
Błysk
źródło
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ż .

Chris Bier
źródło
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;
lfx
źródło
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; ?>
Tom Haigh
źródło
@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.

Niezadowolony Kozioł
źródło
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.

John Kugelman
źródło
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
julz
źródło
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>
  ')
?>
Code Spy
źródło
2
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

echo('Echo as HTML' . htmlspecialchars((string)$enter_string));
ezequiel wernicke
źródło
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.

totymedli
źródło
1
echo '
<html>
<body>
</body>
</html>
';

lub

echo "<html>\n<body>\n</body>\n</html>\n";
Alessandro
źródło
1

Spróbuj tego:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>
edCoder
źródło
0

Nie odbijaj kodu HTML.

Jeśli chcesz użyć

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

powinieneś to zrobić:

<h1><?= $title;?></h1>
Hmache
źródło
-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 } ?>
Cristi bejan
źródło
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