包含模板文件和动态变化的变量

问题描述:

为了让自己的生活更轻松我想为我的项目构建一个非常简单的模板引擎。我想到的一点就是在一个目录中有.html文件,当我想要它们时,这个目录将被包含到使用PHP的页面中。因此,一个典型的index.php是这样的:包含模板文件和动态变化的变量

<?php 

IncludeHeader("This is the title of the page"); 
IncludeBody("This is some body content"); 
IncludeFooter(); 

?> 

沿着这些线路的东西,然后在我的模板文件,我想有:

<html> 
<head> 
    <title>{PAGE_TITLE}</title> 
</head> 
<body> 

但有一件事我不能工作,如何do获取传递给函数的参数,并用它替换{PAGE_TITLE}

有没有人有解决方案或者更好的方法来做到这一点?谢谢。

最简单的事情是这样的:

<?php 
function IncludeHeader($title) 
{ 
    echo str_replace('{PAGE_TITLE}', $title, file_get_contents('header.html')); 
} 
?> 

正如你可能知道,PHP是,本身就是一个模板引擎。话虽如此,有几个项目添加了您所描述的模板类型。你可能想要调查的是Smarty Templates。你可能也想看看article发布在SitePoint一般描述模板引擎。

为了保持简单,为什么不使用.php文件和PHP短标签而不是{PAGE_TITLE}或类似的东西?

<html> 
<head> 
    <title><?=$PAGE_TITLE?></title> 
</head> 
<body> 

然后,分离出可变空间,您可以创建工作的这样的一个模板加载功能:

function load_template($path, $vars) { 
    extract($vars); 
    include($path); 
} 

其中$瓦尔是一个关联数组键等于变量名和值等于变量值。

+0

@Gordon:http://www.mail-archive.com/[email protected]/msg41868。 html – Amber 2009-12-21 18:26:52

+0

有趣。不知道。感谢您的链接。 – Gordon 2009-12-21 18:52:00

为什么不使用php?

<html> 
<head> 
    <title><?=$pageTitle; ?></title> 
</head> 
<body> 

这是我见过的一些框架使用的伎俩:

// Your function call 
myTemplate('header', 
    array('pageTitle' => 'My Favorite Page', 
      'email' => '[email protected]', 
    ) 
); 

// the function 
function myTemplate($filename, $variables) { 
    extract($variables); 
    include($filename); 
} 

// the template: 
<html> 
<head> 
    <title><?=$pageTitle?></title> 
</head> 
<body> 
    Email me here<a href="mailto:<?=$email?>"><?=$email?></a> 
</body> 
</html>