在PHP中包含模板文件并替换变量

时间:2013-12-21 14:29:48

标签: php html templates

我有一个.tpl文件,其中包含我的网页的HTML代码和.php文件,我想在其中使用HTML代码并替换一些变量。 例如,假设这是我的file.tpl:

<html>
<head>
<title>{page_title}</title>
</head>
<body>
Welcome to {site_name}!
</body>
</html>

我想在我的php文件中定义{page_title}{site_name}并显示它们。

我们可以这样做的一种方法是将页面代码加载到变量中,然后替换{page_title}{site_name},然后回显它们。

但我不知道这是最好的方式,因为我认为如果.tpl文件很大会有问题。

请帮我找到最好的方法。谢谢: - )

5 个答案:

答案 0 :(得分:7)

你可以采取一种方式:

$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);

答案 1 :(得分:1)

因为我搜索了这个并找到了这篇文章,我将提供我的解决方案:

$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();

或类似的东西。

希望这会有所帮助!?

答案 2 :(得分:0)

正如您所提到的,您可以将文件读入字符串并替换您的标记,或者您可以包含该文件,但在这种情况下,而不是使用标记插入php片段来回显变量,如:

<html>
<head>
<title><?php echo $page_title ?></title>
</head>
<body>
Welcome to <?php echo $site_name ?>!
</body>
</html>

在这种情况下,您不需要在整个模板上运行str_replace。它还允许您在模板中轻松插入条件或循环。这是我喜欢处理事物的方式。

答案 3 :(得分:0)

我使用与上述类似的东西,但我也在寻找更好的方法。

我用这个:

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

示例data.php文件:

<?php
  echo "My site";
?>

希望这也可以帮助其他人。

答案 4 :(得分:0)

这是一个简单的例子,希望这可行

您的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;


 ?>