我正在弄乱模板,我遇到了一种情况,我需要在浏览器中回显一个包含html和php的模板.如何评估PHP并将其发送到浏览器?
所以这是一个例子(main.php):
<div id = "container">
<div id="head">
<?php if ($id > 10): ?>
<H3>Greater than 10!</H3>
<?php else: ?>
<H3>Less than 10!</H3>
<?php endif ?>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
然后在template.php中:
<?php
$contents; // Contains main.php in string format
echo eval($contents); // Doesn't work... How do I do this line??
?>
Run Code Online (Sandbox Code Playgroud)
编辑:我的模板还允许您从控制器Smarty风格注入数据.输出缓冲区是否允许我这样做,然后评估我的PHP.理想的是它首先通过代码并首先评估所有标签,然后运行php.这样我就可以使用从我的控制器发送的数据创建循环和东西.
So maybe a more complete example:
<div id = "container">
<div id = "title">{$title}</div> <!-- This adds data sent from a controller -->
<div id="head">
<?php if ($id > 10): ?>
<H3>Greater than 10!</H3>
<?php else: ?>
<H3>Less than 10!</H3>
<?php endif ?>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
谢谢!
Jos*_*osh 39
如果您尝试使用混合HTML/PHP的字符串(例如从数据库中,就像我一样),您可以这样做:
eval(' ?>'.$htmlandphp.'<?php ');
Run Code Online (Sandbox Code Playgroud)
更多信息:http://blog.5ubliminal.com/posts/eval-for-inline-php-inside-html/(注意这是2014-3-3的死链接)
Jos*_*zel 13
请改用输出缓冲.eval()是出了名的慢.
main.php:
<div id="container">
<div id="title"><?php echo $title; ?></div><!-- you must use PHP tags so the buffer knows to parse it as such -->
<div id="head">
<?php if ($id > 10): ?>
<H3>Greater than 10!</H3>
<?php else: ?>
<H3>Less than 10!</H3>
<?php endif ?>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
你的档案:
$title = 'Lorem Ipsum';
$id = 11;
ob_start();
require_once('main.php');
$contents = ob_get_contents();
ob_end_clean();
echo $contents;
Run Code Online (Sandbox Code Playgroud)
这个输出将是:
Lorem Ipsum
大于10!