PHP関数を使用して、HTMLの標準ブロックを出力しています。現在は次のようになっています。
<?php function TestBlockHTML ($replStr) { ?>
<html>
<body><h1> <?php echo ($replStr) ?> </h1>
</html>
<?php } ?>
関数内のHTMLを(エコーするのではなく)返したい。文字列にHTML(上記)を構築せずにこれを行う方法はありますか?
heredoc を使用できます。これは、変数補間をサポートしており、かなりきれいに見えます。
function TestBlockHTML ($replStr) {
return <<<HTML
<html>
<body><h1>{$replStr}</h1>
</body>
</html>
HTML;
}
ただし、マニュアルの警告に注意してください-閉じる行には空白を含めないでください。インデントすることはできません。
はい、あります。 ob_start
を使用して、echo
edテキストをキャプチャできます。
<?php function TestBlockHTML ($replStr) { ob_start(); ?>
<html>
<body><h1> <?php echo ($replStr) ?> </h1>
</html>
<?php
return ob_get_clean();
} ?>
これは大雑把な解決策かもしれませんが、関数の標準的な使用ではないので、これが悪い考えであるかどうかを指摘してくれる人に感謝します。 PHP関数からHTMLを取得して、戻り値を文字列として次のように構築せずに成功しました。
function noStrings() {
echo ''?>
<div>[Whatever HTML you want]</div>
<?php;
}
関数を単に「呼び出す」:
noStrings();
そして、それは出力されます:
<div>[Whatever HTML you want]</div>
このメソッドを使用して、関数内でPHP変数を定義し、HTML内にエコーアウトすることもできます。
テンプレートファイルを作成し、テンプレートエンジンを使用してファイルを読み取り/更新します。これにより、将来的にコードの保守性が向上し、ロジックとは別個に表示されます。
Smarty を使用した例:
テンプレートファイル
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>{$title}</title></head>
<body>{$string}</body>
</html>
コード
function TestBlockHTML(){
$smarty = new Smarty();
$smarty->assign('title', 'My Title');
$smarty->assign('string', $replStr);
return $smarty->render('template.tpl');
}
別の方法は、 file_get_contents() を使用して、テンプレートHTMLページを作成することです
テンプレートページ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>$title</title></head>
<body>$content</body>
</html>
PHP関数
function YOURFUNCTIONNAME($url){
$html_string = file_get_contents($url);
return $html_string;
}
または、これをそのまま使用できます:
<?
function TestHtml() {
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->
<? } ?>
この関数からコンテンツを取得するには、これを使用します:
<?= file_get_contents(TestHtml()); ?>
それでおしまい :)
サードパーティのツールに依存する必要がない場合は、この手法を使用できます。
function TestBlockHTML($replStr){
$template =
'<html>
<body>
<h1>$str</h1>
</body>
</html>';
return strtr($template, array( '$str' => $replStr));
}