Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中包含模板文件并替换变量_Php_Html_Templates - Fatal编程技术网

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

在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}!

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

<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内容。