如何将 Varnish ESI 与模块化 PHP 模板系统一起使用
How to use Varnish ESI with modular PHP templating system
我希望在数据 heavy/user-centric 网站中实施清漆。如何使用使用 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 个页面中的 esi 标签包含 html 个片段?
与此类似:
<?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
?>
您只需为您的特定 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 "feature" 处于禁用状态)或 <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--
我希望在数据 heavy/user-centric 网站中实施清漆。如何使用使用 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 个页面中的 esi 标签包含 html 个片段?
与此类似:
<?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
?>
您只需为您的特定 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 "feature" 处于禁用状态)或 <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--