在PHP中包含模板文件并替换变量
我有一个.tpl文件,其中包含我的网页的HTML代码,还有一个.php文件,我想在其中使用HTML代码并替换一些变量。 例如,假设这是my file.tpl:在PHP中包含模板文件并替换变量,php,html,templates,Php,Html,Templates,我有一个.tpl文件,其中包含我的网页的HTML代码,还有一个.php文件,我想在其中使用HTML代码并替换一些变量。 例如,假设这是my file.tpl: <html> <head> <title>{page_title}</title> </head> <body> Welcome to {site_name}! </body> </html> {页眉} 欢迎来到{site_name}!
<html>
<head>
<title>{page_title}</title>
</head>
<body>
Welcome to {site_name}!
</body>
</html>
{页眉}
欢迎来到{site_name}!
我想在我的php文件中定义{page\u title}
和{site\u name}
,并显示它们
我们可以这样做的一种方法是在变量中加载页面代码,然后替换{page\u title}
和{site\u name}
,然后回显它们
但我不知道这是否是最好的方法,因为我认为如果.tpl文件很大,就会出现一些问题
请帮我找到最好的方法。谢谢:-)一种方法是:
$replace = array('{page_title}', '{site_name}');
$with = array('Title', 'My Website');
ob_start();
include('my_template.tpl');
$ob = ob_get_clean();
echo str_replace($replace, $with, $ob);
正如您所提到的,您可以将文件读入字符串并替换标记,或者您也可以包含文件,但在这种情况下,不使用标记,而是插入php片段以回显变量,如:
<html>
<head>
<title><?php echo $page_title ?></title>
</head>
<body>
Welcome to <?php echo $site_name ?>!
</body>
</html>
欢迎光临!
在这种情况下,不需要在整个模板上运行str_replace。它还允许您轻松地在模板中插入条件或循环。这是我喜欢的处理事情的方式。我使用类似于上述的方法,但我也在寻找更好的方法 我用这个:
$templatefile = 'test.tpl';
$page = file_get_contents($templatefile);
$page = str_replace('{Page_Title}', $pagetitle, $page);
$page = str_replace('{Site_Name}', $sitename, $page);
echo $page;
很抱歉提出一个已回答的问题,但我正在寻找更好的方法来解决这个问题
我目前正在使用jQuery来实现这一点,这样我就可以在没有完全重新加载的情况下拥有动态页面。例如:
<div id="site_name"></div>
<script type="text/javascript">
$.ajax({
type: 'GET',
url: 'data.php',
data: {
info: 'sitename'
}
success: function(data){
$('#site_name').html(data);
//the data variable is parsed by whatever is echoed from the php file
}
});
</script>
$.ajax({
键入:“GET”,
url:'data.php',
数据:{
信息:“站点名称”
}
成功:功能(数据){
$('#site_name').html(数据);
//数据变量由php文件中回显的任何内容进行解析
}
});
示例data.php文件:
<?php
echo "My site";
?>
希望这也能帮助其他人。因为我搜索了这篇文章,找到了这篇文章,我将提供我的解决方案:
$replacers = [
'page_title'=> 'Title',
'site_name' => 'My Website',
];
echo preg_replace("|{(\w*)}|e", '$replacers["$1"]', $your_template_string);
您必须将模板设置为字符串。
例如
file_get_contents(),
ob_start();
include('my_template.tpl');
$ob = ob_get_clean();
或者类似的事情
希望这会有帮助 这里是一个简单的例子,希望这能奏效 您的HTML:
<?php
$html= '
<div class="col-md-3">
<img src="{$img}" alt="">
<h2>{$title}</h2>
<p>{$address}</p>
<h3>{$price}</h3>
<a href="{$link}">Read More</a>
</div>
';
?>
要替换的阵列
<?php
$content_replace = array(
'{$img}' => 'Image Link',
'{$title}' => 'Title',
'{$address}'=> 'Your address',
'{$price}' => 'Price Goes here',
'{$link}' => 'Link',
);
$content = strtr($html, $content_replace );
echo $content;
?>
我会说:要么使用普通的PHP文件进行模板制作,要么使用无数现有的模板制作解决方案,如Twig、Smarty或Mustach。如果你想发明自己的模板,你应该知道自己在做什么,并且有充分的理由创建另一个模板系统。当我看到人们在php中实现模板解决方案时,我总是感到不安,因为php实际上是构建在html中使用的。使用模板有什么好处?在许多情况下,您可以使用结构清晰的php/html代码实现相同的功能。@Layne有时需要限制php的可用性。例如,如果允许用户创建模板。你不想让他们运行任何PHP代码。它也比str_replace快得多,但它很容易受到攻击,任何PHP代码都可以从模板文件中运行。在模板文件中使用PHP会给模板设计者带来麻烦。这会产生与文件\u get_contents
相同的结果,但容易受到攻击,因为PHP是用include
评估的。user3105264,如果您不想使用模板系统,那么您应该使用file\u get\u内容。