2010-08-09 56 views
4

我正在尋找一種更好的方法來從php生成動態html。在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> 

回答

1

使用Smarty TPL等模板引擎。這就是他們。

它們都將HTML顯示與邏輯分開,並提供便利的功能來生成繁瑣的事情,如HTML單選按鈕。

+0

一年後,我正在使用Smarty。這很棒!謝謝! – Samuel 2011-06-03 15:29:20

0

爲什麼不把php內聯?你能告訴我們爲什麼你需要在輸出前存儲它嗎?

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

你真的不應該使用短標籤。

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> 
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> 

你可以調用markup()在您的for循環中:

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