替代在PHP字符串中存储html

时间:2010-08-09 04:16:50

标签: php

我正在寻找一种从php生成动态html的更好方法。

在我做这样的事情之前:

//generate.php
for(...)
{
    $markup .= '<a id="'.$i.'">link'.$i.'</a>';
}

这真的很难看,我更不希望在php字符串中内联定义我的标记。

我正在寻找include "markup.php";的功能,但我需要能够将结果存储到字符串中,而不是立即输出。像下面这样的东西会很棒。

//generate.php
for(...)
{
    $markup .= include "markup.php";
}

//markup.php
<a id="<?=$i?>">link<?=$i?></a>

5 个答案:

答案 0 :(得分:1)

使用模板引擎,如Smarty TPL。这就是它们。

它们将HTML显示与逻辑分开,并提供便利功能来生成HTML单选按钮等繁琐的东西。

答案 1 :(得分:1)

我相信只要你的包含文件以return语句结束,第二种方法就可以正常工作。但是,为什么不使用模板引擎,例如Smarty

在Smarty中(我确定还有其他的仍然存在循环,但它们都适用于标记。在调用display()方法之前,模板的结果也不会输出。这允许你分配任何东西你需要的变量。你的例子会像:

PHP:

$links = array('http://stackoverflow.com/','http://google.com'); // whatever you're looping over.
$smarty->assign('links', $links);
// ... other processing ... etc.
$smarty->display('path/to/template.tpl');

模板:

<html>
<body>
{foreach from=$links item=$link }
<a href="{$link}">link {$link}</a>
{/foreach}
</body>
</html>

答案 2 :(得分:1)

你可以这样做:

ob_start();
include 'yourfile.php';
$markup = ob_get_contents();

查看输出缓冲的其他功能:http://www.php.net/manual/en/ref.outcontrol.php

答案 3 :(得分:0)

为什么不抛出php内联?你能告诉我们为什么你需要在输出之前存储它吗?

for(...)
{
    ?><a id="<?php echo $i; ?>">link <?php echo $i; ?></a><?php
}

你真的不应该使用短标签。

答案 4 :(得分:0)

在@jcmonkey的建议基础上,您可以编写如下函数:

function markup($i) {
    ob_start();
    include 'markup.php';
    return ob_get_contents();
}

...文件markup.php如下所示:

<?php /* I don't like using short_open_tag */ ?>
<a id="<?php echo $i; ?>">link<?php echo $i; ?></a>

然后,您可以在for循环中调用markup()

for(...)
{
    $markup .= markup($i);
}