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";
PHPでHTMLをエコーする方法はいくつかあります。
<?php if(condition){ ?>
<!-- HTML here -->
<?php } ?>
if(condition){
echo "HTML here";
}
エコーでは、HTMLで二重引用符を使用したい場合は、次のように一重引用符エコーを使用する必要があります。
echo '<input type="text">';
または、あなたはそのように彼らを脱出することができます:
echo "<input type=\"text\">";
テンプレートエンジンは、主にHTMLを含むドキュメントでPHPを使用するために使用されます。実際、PHPの当初の目的はテンプレート言語になることでした。そのため、PHPでは、変数をエコーするために短いタグなどを使用できます(例:<?=$someVariable?>
)。
構文をさらに簡潔にする他のテンプレートエンジン(Smarty、Twigなど)があります(例:{{someVariable}}
)。
テンプレートエンジンを使用する主な利点は、デザイン(プレゼンテーションロジック)とコーディング(ビジネスロジック)を区別することです。また、長期的に見てコードをよりクリーンで簡単に管理できるようになります。
あなたがより多くの質問があるならば、コメントを残してください。これらについては、 PHP Documentation に詳しい説明があります。
神のご加護を!
注:PHP短いタグ<?
および?>
は、short_open_tag
php.ini設定ファイルディレクティブで有効になっている場合にのみ使用可能であるため、お勧めできません。またはPHPが--enable-short-tags
オプションで設定されている場合 5.4以降の設定に関係なく利用可能です 。
このようにしてみてください。
$variable = <<<XYZ
<html>
<body>
</body>
</html>
XYZ;
echo $variable;
あなたは 制御構造のための代替構文代替構文 を使用し、phpから抜け出すことができます:
<?php if ($something): ?>
<some /> <tags /> <etc />
<?=$shortButControversialWayOfPrintingAVariable ?>
<?php /* A comment not visible in the HTML but is a bit of a pain to write */ ?>
<?php else: ?>
<!-- else -->
<?php endif; ?>
基本的には、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?>
を使用する必要があるかもしれません。
私はこのスタイルの一部です:
<html>
<head>
<% if (X)
{
%> <title>Definitely X</title>
<% }
else
{
%> <title>Totally not X</title>
<% }
%> </head>
</html>
はい、私はASPスタイルのタグを使います。 PHPとHTMLのブレンドは私の目には非常に読みやすいように見えます。トリックは<%
と%>
マーカーを正しくすることです。
もう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を書き出してキャッチしてからもう一度書き込むのは奇妙に思えるかもしれませんが、すべての種類のフォーマット設定(Heredocsなど)を実行でき、ページテンプレートの手間をかけずに正しく出力をテストできるということです道。 (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
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';
echo( 'Echo as HTML' . htmlspecialchars( (string)$enter_string ) );
これを試してみてください.......
<?php
echo <<<HTML
your html tags here
HTML;
?>
Chris B's answerに加えて、とにかくecho
を使う必要があり、それでもシンプルで構造化されたままで<?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
をパラメータと一緒に使用する方が連結よりも効果的です。
hTMLをエコーアウトしない
使いたい場合
<?php echo "<h1> $title; </h1>"; ?>
あなたはこれをするべきです:
<h1><?= $title;?></h1>
次のようにPHPファイル内のテキストをエコーするには、print関数を使用するだけです。
<?php
print('
<div class="wrap">
<span class="textClass">TESTING</span>
</div>
')
?>
echo '
<html>
<body>
</body>
</html>
';
または
echo "<html>\n<body>\n</body>\n</html>\n";