4

概要:私は自分のサイトに魅力的なシステムを作成していますが、現時点では非常にうまく機能しており、期待どおりに機能しています。{PAGE_SIDEBAR}のようなものでファイルテンプレートを表示したい場合にのみ問題が発生します。 /sidebar.phpまたは同様のもの。

使ってます

//loads of other str_replace here
$body = str_replace("{PAGE_SIDEBAR}, include("template/sidebar.php"), $body);
echo $body;

これは機能しますが、{PAGE_SIDEBAR}がどこにあるかではなく、本文の先頭にファイルが含まれます。タグがある場合は、番号1が表示されます。

より良い説明についてはスクリーンショットを参照してください:

レンダリングされたテンプレートが以前にどのように見えるか

上記の挿入コードを使用する

また、興味深い点として、include()の代わりにfile_get_contents()を使用した場合の外観:http://www.jamesmoorhouse.co.uk/stack_overflow/str_replace/file_get_contents_method.png

理想的には、includeメソッドの場合と同じように機能することを望んでいますが、file_get_contentsメソッドがそれを配置する場所を表示します。

4

1 に答える 1

11

文字列として使用できるようにするには、出力バッファリングincludeを使用して吐き出されるすべてのものをキャプチャする必要があります。

ob_start();
include("template/sidebar.php");
$str_sidebar = ob_get_clean();
$body = str_replace("{PAGE_SIDEBAR}", $str_sidebar, $body);
echo $body;

置き換えたいプレースホルダーがたくさんある場合は、コールバックで正規表現ベースのソリューションを使用して、それぞれに対してこのコードを繰り返す必要がないようにすることができます。入門書については、ここで私の答えを参照してください。

于 2012-07-04T10:51:50.100 に答える