2013-12-21 61 views
2

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

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

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

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

但我不知道这是最好的方法,因为我认为如果.tpl文件很大,会出现一些问题。

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

+1

,我会说:要么使用纯PHP文件用于模板,或者使用gazillion现有的模板解决方案之一,如Twig,Smarty或Moustache。如果你想发明自己,你应该知道你在做什么,并有充分的理由创建另一个模板系统。 – deceze

+1

当我看到人们在PHP中实现模板化解决方案时,我总是感到不安,因为当PHP实际上构建为在html中使用时。您期望使用模板有什么样的好处?在许多情况下,您可以使用干净的结构化php/html代码实现相同效果。 – 2013-12-21 14:47:53

+0

@Layne有时需要限制PHP的可用性。例如,如果用户被允许创建模板。你不希望他们运行任何PHP代码。 –

回答

4

的一种方式,你可以做到这一点:

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

这产生与'file_get_contents'相同的结果,但容易被利用,因为PHP是使用'include'评估的。 user3105264,如果你不想使用模板系统,恕我直言,你应该使用file_get_contents。 –

0

至于你提到你可以文件读入到一个字符串和替换你的标记,或者你可以包含该文件,但在这种情况下,而不是使用标记插入PHP片段呼应变量,例如:

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

在这种情况下,你不需要对整个模板运行str_replace函数。它也让您轻松地在您的模板中插入条件或循环。这是我喜欢处理事物的方式。

+0

它比str_replace快得多,但它很脆弱,任何PHP代码都可以从模板文件运行。 –

+1

在模板文件中使用php会给模板设计人员带来麻烦。 –

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"; 
?> 

希望这可以帮助别人了。

1

因为我搜索了这一点,并发现这篇文章,我会提供我的解决方案:

$replacers = [ 
    'page_title'=> 'Title', 
    'site_name' => 'My Website', 
]; 
echo preg_replace("|{(\w*)}|e", '$replacers["$1"]', $your_template_string); 

你必须让你的模板为String。 例如与

file_get_contents(), 
ob_start(); 
include('my_template.tpl'); 
$ob = ob_get_clean(); 

或类似的东西。

希望这会有所帮助!?

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; 


?>