Я пытаюсь создать кучу статических HTML-страниц из одного шаблона PHP. Я хочу передать массив (строку в БД MySql) в файл шаблона .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>
Таким образом, в основном вы хотите получить некоторые данные из базы данных, а затем использовать файл 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 в качестве языка шаблонов, вы в основном изобретаете свои собственные. Это менее эффективно, но безопаснее, потому что вы ограничиваете доступ шаблона к внутренним функциям вашей программы.
Еще один вариант - это база данных для XML через XSLT-маршрут - загружайте свои данные, преобразуйте их в XML-представление, примените XSLT-шаблон, который выводит (X) HTML. Это обеспечивает гибкость и безопасность от инъекций, но XSLT довольно сложно освоить, сложнее отладить, а преобразование в XML менее эффективно, чем прямой путь к PHP.