133

条件付きでHTMLを出力してページを生成したいので、PHP 4以降でHTMLの複数行スニペットをエコーする最も簡単な方法は何ですか?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";
4

13 に答える 13

294

PHP で HTML をエコーする方法はいくつかあります。

1. PHP タグの間

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

2.エコーで

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

エコーでは、HTML で二重引用符を使用する場合は、次のように一重引用符のエコーを使用する必要があります。

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

または、次のようにエスケープできます。

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

3.ヒアドキュメント

4. Nowdocs (PHP 5.3.0 以降)

テンプレート エンジンは、主に HTML を含むドキュメントで PHP を使用するために使用されます。実際、PHP の当初の目的はテンプレート言語になることでした。そのため、PHP では短いタグなどを使用して変数をエコーすることができます (例: <?=$someVariable?>)。

構文をさらに簡潔にする他のテンプレート エンジン (Smarty、Twig など) があります (例: {{someVariable}})。

テンプレート エンジンを使用する主な利点は、設計 (プレゼンテーション ロジック) をコーディング (ビジネス ロジック)から分離しておくことです。また、コードがよりクリーンになり、長期的には保守が容易になります。

さらに質問がある場合は、お気軽にコメントを残してください。

これらの詳細については、PHP ドキュメントを参照してください。


注: PHP の短いタグは推奨さ<?れません。これらは、 php.ini 構成ファイル ディレクティブで有効にするか、オプションで PHP を構成した?>場合にのみ使用できるためです。5.4 以降の設定に関係なく使用できますshort_open_tag--enable-short-tags

于 2009-07-08T20:36:18.700 に答える
67

次のように試してください(ヒアドキュメント構文):

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

</body>
</html>
XYZ;
echo $variable;
于 2009-07-08T20:29:33.550 に答える
32

制御構造に代替構文代替構文を使用して、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; ?>
于 2009-07-08T20:28:12.507 に答える
16

基本的に、HTML は PHP タグの外側のどこにでも置くことができます。ロジックとプレゼンテーションを分離するために、データを表示する前に必要なすべてのデータ処理を行うことも非常に有益です。

データ表示自体は、同じ PHP ファイルの下部にある場合もあれば、大部分が HTML で構成される別の PHP ファイルを含める場合もあります。

私はこのコンパクトなスタイルを好みます:

<?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 の設定によっては、<?php echo $var; ?>代わりに使用する必要がある場合があります。<?=$var?>

于 2009-07-08T20:54:04.967 に答える
7

もう 1 つの方法は、HTML を別のファイルに置き、変更する領域をプレースホルダー [[content]] でマークすることです。(str_replace の代わりに sprintf を使用することもできます。)

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

別の方法として、バッファにキャプチャされた画面にすべての PHP 要素を出力し、HTML を記述して、PHP 出力をページに戻すこともできます。

PHP を書き出してキャッチし、もう一度書き直すのは奇妙に思えるかもしれませんが、あらゆる種類の書式設定 (ヒアドキュメントなど) を実行し、ページの手間をかけずに正しく出力をテストできることを意味します。テンプレが邪魔。(ところで、Joomla CMSはこの方法でそれを行います。)

すなわち:

<?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
于 2009-07-09T09:34:13.710 に答える
7

私はこのスタイルに部分的です:

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

はい、ASP スタイルのタグを使用します。PHP と HTML の融合は、私の目には非常に読みやすいように見えます。秘訣は、<%%>マーカーを適切に配置することです。

于 2009-07-08T20:32:27.227 に答える
1

Chris Bの回答に加えて、とにかく使用する必要がある場合echoでも、シンプルで構造化されたままにし、コードを 's でスパムしたくない<?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、パラメーターを使用すると、連結するよりも効果的です。

于 2013-08-02T02:01:30.293 に答える
-1

HTML をエコーアウトしません。

使いたい場合

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

あなたはこれをしているはずです:

<h1><?= $title;?></h1>
于 2015-02-24T09:37:11.577 に答える