2010-09-11 90 views
0

我想从单个PHP模板创建一堆静态HTML页面。我想将一个数组(MySql DB中的一行)传递给.php模板文件,以便我可以将内容用作变量并返回HTML页面。什么是最好的方法来做到这一点? POST请求?一个函数?我通过下面的代码的MySQL查询结果环路,并创建每一行一个.html页面,但我不知道如何将$ row数组传递给“的template.php”文件:传递数组作为参数到PHP文件

while ($row = mysql_fetch_array($result)) 
{ 

    $variableToPass = $row; 
    $dynamicsource = fopen('Template.php', 'r'); 
    $htmldata = fread($dynamicsource, 1235); 
    fclose($dynamicsource); 

    $targetfilename = "row/" 
     . $row['name'] 
     . ".html"; 
    $targetfile = fopen($targetfilename, 'w'); 
    fwrite($targetfile, $htmldata); 
    } 

template.php文件中可以看看,比如说像:

<html> 
    <body> 
     <?php 
     include 'mySqlTests.php'; 
     print_r($variableToPass); 
     ?> 
     other text and stuff 
    </body> 
</html> 

回答

0

所以基本上你希望做的是从数据库中获取一些数据是什么,然后使用PHP文件作为模板创建一个HTML文件。

最简单的方法是在模板生成器代码的适当位置插入模板include;您可以将ob_startob_get_clean放在呼叫的周围,以将输出捕获到字符串中,而不是将其发送到客户端。调用include的范围内的变量将在包含文件中提供。例如:

<?php 
foreach ($rows as $row) { 
    ob_start(); 
    include 'template.php'; 
    $data = ob_get_clean(); 
    file_put_contents('target/' . $row['name'] . '.html'); 
} 

...和模板可以做这样的事情:

有这种方法虽然一些注意事项:

  • 如果模板包含危险的代码,它会被执行。
  • 该模板可以访问包含时在范围内的所有变量,包括您不希望修改的变量。通过将模板调用放入专用功能可以稍微缓解这种情况。

另一种方法是对加载的模板进行简单的搜索和替换;而不是使用PHP作为模板语言,你基本上是在发明自己的。这效率较低,但更安全,因为您限制了模板对程序内部的访问。

另一个选择是通过XSLT路由将数据库转换为XML - 加载数据,将其转换为XML表示形式,应用输出(X)HTML的XSLT模板。这从注入提供了灵活性和安全性,但XSLT相当难以掌握,难以调试,并且转换为XML的效率低​​于直接转向PHP的效率。