我正在尝试从单个PHP模板创建一堆静态HTML页面。我想将一个数组(MySql DB中的一行)传递给.php模板文件,以便我可以将内容用作变量并获取HTML页面。最好的方法是什么?一个POST请求?一个功能?我在以下代码中循环MySQL查询结果并为每一行创建一个.html页面,但我不确定如何将$ row数组传递给'Template.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 :(得分:0)
所以基本上你要做的是从数据库中获取一些数据,然后使用PHP文件作为模板来创建HTML文件。
最简单的方法是在模板生成器代码中的适当位置include
模板;您可以在调用周围放置ob_start
和ob_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。