php - 使用服务器端语言进行开发但部署到静态 HTML 的最佳方式

标签 php html templates kohana

我们有一个客户,我们为他建立了很多基于模板的网站。理想情况下,我们会使用类似 kohana ( http://www.kohanaphp.com/ ) 的东西来处理模板并使站点范围内的更改变得轻而易举。

不幸的是,我们的客户端不能(也不会)托管任何服务器端代码(而且在您询问之前,这不会改变并且我们自己托管文件不是一种选择),因此部署到它们的任何文件都必须是 HTML、Javascript、仅限 CSS、图像和 Flash。

有没有一种好的方法可以在像 kohana 这样的框架环境中进行开发,使网站易于管理,但又能够部署或导出网站的纯 HTML 版本(网站没有动态方面,例如搜索需要服务器端语言,不使用数据库)?

我想这类似于抓取网站,但我想要更可靠的东西,因为一些页面 Assets 是使用 javascript 动态加载的。

谢谢

最佳答案

我使用 Template Toolkit (Perl) 并有一个从模板生成静态文件的简单脚本。这非常适合您所处的情况(通用导航等)。

它带有一个 ttree 命令,该命令将处理目录树并将结果放入另一个目录树中。

这是我使用的 tt.rc 文件:

# ignore these files (regular expressions)
ignore = \.svn
ignore = ^#
ignore = ~$
ignore = .DS_Store
ignore = \.tt$

# if these template files change, reprocess everything
depend *=tpl/wrapper,tpl/defaults,style/default.html

# just copy these files, don't process as templates
copy = \.(gif|png|pdf|jpg)$

# verbose output
verbose

# recurse into subdirectories
recurse

# setup some defaults from tpl/defaults
pre_process = tpl/defaults

# process this file instead of the real file (see below how this is used)
process     = tpl/wrapper

# process files from src/, output to html/
# extra templates in lib/ (tpl/wrapper for example).
src  = src
dest = html
lib  = lib

一些特殊文件,tpl/defaults

[%-  page = {
            title = template.title,
            style = template.style or 'default.html'
    };

    base = INCLUDE tpl/base_uri;

    # don't include any whitespace from here...
    RETURN;
-%]

tpl/wrapper

[%- content = PROCESS $template;    
   IF !template.name.search('.html') OR page.style == 'none';
      content;
   ELSE;
      default_style_template = "style/" _ page.style;
      PROCESS $default_style_template;
   END;
%]

这将处理真正的模板;将结果放入 content 变量中,然后处理 style 模板(使用 tpl/defaults 中的 page.style 设置>;默认为 defaults.html)。

lib/style/default.html 样式文件只需要有

[% content %]

某处包含真实模板;在此之前和之后,您可以使用标准的页脚和页眉。

您可以在 tt2.org 阅读有关模板工具包的更多信息.

另一种选择是在递归模式下使用 wget(或类似的)来“镜像”PHP 在开发服务器上生成的页面;但我不建议这样做。

关于php - 使用服务器端语言进行开发但部署到静态 HTML 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1151984/

相关文章:

php - Python 到 PHP 的行

php - 当我不更新图像时,它会变成空白并从数据库中删除?

php - Zend框架查询,添加到字符串

javascript - 不能在 #header 中的 HTML/CSS 模板中使用 onClick

html - 在 CSS/HTML 中命名和调用元素

php - 我可以让 form_multiselect() 返回我传入的值而不是索引吗?

html - 移动网页布局不一致问题

c++ - 长 C++ 模板类型的 doxygen 换行符

c++ - 推导模板参数表达式的类型

c++ - 从范围类型获取迭代器类型