这种页面呈现技术是否有名称?


Does this page rendering technique have a name?

我正在使用动态HTML模板系统(如PHP),我想知道这个问题/解决方案是否有名称或已经在某处完成。

这个问题涉及到动态控制内容,但是在内容和代码纠缠在一起之后。想象两个页面,一个页面使用了很多花哨的样式和框架,另一个页面没有,但共享相同的"外层包装器"模板。

<!DOCTYPE html>
<html>
<head>
<title>Both pages share a static title</title>
<script src="..." type="text/javascript">
<script src="..." type="text/javascript">
<script src="..." type="text/javascript">
</head>
<body>
<!-- only this part is dynamic, the top and bottom parts are shared among all pages -->
...
</body>
</html>

我们的计划是在header的位置留下一个令牌,修改body中的占位符对象,然后在页面完成渲染之后(但在发送到客户端之前)替换令牌所在的占位符内容。

<!DOCTYPE html>
<html>
<head>
__HEAD__
</head>
<body>
<?
    $head->title('my very own title');
    $head->script('jquery 1.5.2');      
?>
...
</body>
</html>

__HEAD__标记将扩展为实际的HTML。

<!DOCTYPE html>
<html>
<head>
<title>my very own title</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript">
</head>
<body>
...
</body>
</html>

有人见过这个吗?

编辑:这里有人在谈论同样的问题,但有一个稍微不同的解决方案。 http://iamcam.wordpress.com/2007/07/15/smarty-assigning-variables-to-the-header-from-the-body/

编辑^2:下面公认的答案是,这是模板引擎所做的事情,这是真的。这个特殊场景的困难在于执行引擎和模板引擎交织在一起(就像老式的PHP一样),因此很难看到它们之间的界限。使用合适的模板即可轻松解决。

这叫做模板引擎。除了简单地使用PHP作为模板引擎之外,还有其他可用的解决方案,例如Smarty。此外,许多框架(如CakePHP和symfony)也将其代码分离到布局和视图中,以实现这一点。

perl最大的例子是Template Toolkit。对于其他语言,您有ASP、JSP、EJS、Jade、mustaches等。

依赖注入

OP不清楚原来的问题。要呈现的页面主体应该被隔离到一个单独的文件中。正文文件应该对HTML的头部内容有最终决定权,而头部内容由另一个文件控制。

所以,输出特定脚本的实际功能可以由一个花哨的模板引擎提供,但这里表达的更重要的思想是依赖注入,其中头文件不需要知道在某个遥远的地方和时间确定的依赖项。

使用Smarty V3继承可以做到这一点。看一下:http://www.smarty.net/inheritance