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。

请参阅屏幕截图以获得更好的解释:

渲染模板之前的样子

使用上面的插入代码

此外,对于兴趣点,使用 file_get_contents() 而不是 include() 的外观如何: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 回答