如何将 Varnish ESI 与模块化 PHP 模板系统一起使用

我正在寻找将清漆实施到数据重/以用户为中心的网站中。如何使用使用 php 包含 html 模板的系统设置 ESI?


我目前使用一个自定义 php 模板系统(类似于 MVC 设计模式),其工作方式如下:


发出页面请求 -> php 计算逻辑 -> php 包含 html 模板页面并填写变量 -> 页面输出


我只见过主要用于 html 页面的 esi 标签,包括 php 片段。


像下面的代码:


<HTML>

<BODY>

The time is: <esi:include src="/php-includes/date.php"/>

at this very moment.

</BODY>

</HTML>

但是可以反过来做吗?例如,在 php 页面中包含 html 片段的 esi 标签?


与此类似:


<?php

//logic here

$content = "this will be displayed on the content page"


include("templates/header.html.php"); //esi would go here since page is static content

include("templates/content.html.php"); //no esi here, since page is dynamic content

include("templates/footer.html.php"); //esi would go here since page is static content

?>


墨色风雨
浏览 107回答 1
1回答

慕莱坞森

您只需要为您的特定 MVC 实现创建一种“ESI”渲染器,如在 中/esi.php?template=foo,然后在内部类似:... whatever you need to boostrap your app in order to render a template ....include("templates/$template.html.php");.... exit so no header/fooder stuff is rendered, only template HTML of interest当然不是那么简单,但简而言之就是类似的事情。然后,我将在每个模板文件顶部放置一些逻辑以发出 HTML(如果由呈现esi.php或 ESI“功能”处于禁用状态)或<esi仅标记。所以例如templates/header.html.php可以有(伪代码):if esi (detect by checking request_uri to be esi.php) then echo '<esi /esi.php?template=header?somevar-from-parent=...'; return---existing code--
打开App,查看更多内容
随时随地看视频慕课网APP