Php 使用服务器端语言进行开发的最佳方法,但要部署到静态HTML

Php 使用服务器端语言进行开发的最佳方法,但要部署到静态HTML,php,html,templates,kohana,Php,Html,Templates,Kohana,我们有一个客户,我们为他建立了许多基于模板的网站。理想情况下,我们将使用类似kohana()的东西来处理模板,并使站点范围内的更改变得轻而易举 不幸的是,我们的客户机不能(也不会)托管任何服务器端代码(在您询问之前,这不会改变,托管文件本身不是一个选项),因此部署到它们的任何文件必须是HTML、Javascript、CSS、图像和Flash 在kohana这样的框架环境中,是否有一种很好的开发方法,可以使站点易于管理,但能够部署或导出站点的纯HTML版本(站点没有动态方面,例如需要服务器端语言的

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

不幸的是,我们的客户机不能(也不会)托管任何服务器端代码(在您询问之前,这不会改变,托管文件本身不是一个选项),因此部署到它们的任何文件必须是HTML、Javascript、CSS、图像和Flash

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

我想这类似于对站点进行爬网,但我希望有更可靠的东西,因为一些页面资产是用javascript动态加载的


谢谢

考虑其他解决方案,即使你认为你不能使用它们。对新颖的解决方案视而不见是错误的,因为您的客户端“无法处理服务器端语言”(意译)。有时需求是不正确知识的结果。例如,客户机真的不能承载任何服务器端语言,是因为它们不能承载IIS或Apache,还是因为它们没有IIS或Apache,也不能安装任何其他应用程序? (如果他们可以安装一个应用程序,也许一个解决方案就是只提供一个“小型”Web服务器——也许是XSP)

我还建议你看看谷歌的“齿轮”。我听说过这方面的好消息,尽管它可能不太适合你的需要

如果做不到这一点,您最好忽略经典的服务器端语言,在客户端完成所有工作,或者使用服务器端语言作为导出器。(这将是一个自定义作业)。我认为使用自定义脚本“导出”站点可能是最好的方法


最后,这个问题并没有一个单一的答案——作为一名程序员,你的工作就是权衡不同的优势和不同的解决方案,并选择最好的解决方案。

嗯。。。如果客户端的服务器不允许PHP或ASP,我认为他们不会使用CGI,因为CGI更不安全

好的,你可以在开发应用程序中创建你的页面,在浏览器中加载这些页面,然后保存生成的html。对所有页面都这样做,您就可以完成设置


只需确保链接指向正确。

我不知道有什么具体的解决方案,但是如果您愿意用自己选择的语言创建一个简单的模板系统,那么实际上只需要制作一个脚本来生成页面。我十几岁时就有过这样的网站。每当我上传新内容时,我都会重新生成站点并上传新页面。当时我使用的是PERL


创建这样一个脚本的复杂性在很大程度上取决于您用于构建站点的内容。我使用的是一个完全定制的构建,它的构建目的是按照它所做的那样工作。在这种情况下,我想您可能希望自己编写一个简单的模板系统,以获得模板的优势,并能够从中生成静态HTML。

我不知道这是否是一个选项,但我建议您这样做。这是一个在线CMS,您可以使用CSS类定义内容区域,并可以在线编辑内容。您确实需要提供FTP详细信息,因此这可能会破坏您的交易,但我认为值得一提。

试试看。这会部分解决你的问题

WaveMaker Studio有一种模板功能,它来自社区开源版本

HTH

我使用(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;
-%]
[%- 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;
%]
而且
tpl/wrapper

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

    base = INCLUDE tpl/base_uri;

    # don't include any whitespace from here...
    RETURN;
-%]
[%- 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
style文件只需要

[% content %]
包含真实模板的地方;在此之前和之后,您可以使用标准页脚和页眉

有关模板工具包的更多信息,请访问


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

CGI仍然是一种选择吗?大多数人忽视了它的可用性,因为它已经被其他服务器端脚本暴露出来了,但我发现在类似的情况下(我以前也经历过这种情况),CGI通常是一种选择。不幸的是,不是。除了HTML、XML、JS、CSS、Flash和图像之外什么都没有。他们是一家银行,出于安全原因,他们断然拒绝托管由第三方(美国)开发的站点,该第三方使用服务器端组件构建。他们已经多次提到这一点,答案是非常明确和明确的“不”。这不是说对新的解决方案视而不见,这是我们必须处理的情况。GoogleGears并不真正适合模板化(也不完全适合在客户端进行)。用自定义脚本导出站点似乎是唯一的方法,但我一直在寻找很好的方法,特别是如果它们与Kohana集成的话。而且我也不是在寻找一个单一的答案,这是解决问题的好办法。这让我有点好奇——为什么一家银行想要一个没有任何动态内容的网站呢?迈克·麦格:我怀疑,当银行说“不”时,他们是从一个不正确的参照系对某项特定技术做出反应的