【问题标题】:Does this page rendering technique have a name?这种页面渲染技术有名字吗?
【发布时间】:2011-08-17 23:48:08
【问题描述】:

我正在使用动态 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>

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

<!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/

Edit^2:下面接受的答案是,这是 模板引擎 所做的事情,这是真的。这个特定场景的困难在于执行引擎和模板引擎交织在一起(就像老式 PHP 一样),因此很难看到分界线。使用适当的模板即可轻松解决。

【问题讨论】:

    标签: php html perl templates


    【解决方案1】:

    这称为template engine。除了简单地使用 PHP 作为模板引擎之外,还提供了其他解决方案,例如 Smarty。此外,许多框架(如 CakePHP 和 symfony)也将它们的代码分成布局和视图以提供此功能。

    【讨论】:

    • 我觉得自己很傻/很糟糕。我想,是的,这就是模板的作用,但我只是设想它会比直接替换/插值稍微复杂一些。就像,变量可以是一个对象,它可以有方法,它最终会通过最终呈现来响应方法。我想我把它和 Builder 模式混为一谈了……
    • 嗯?没有理由感到愚蠢或糟糕。您只是独立发现一个好主意。看看 CakePHP 如何处理它的视图。这与您的方法相似。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      依赖注入

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-01-15
          • 1970-01-01
          • 2020-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多