【问题标题】:Best way to use a server side language for development, but deploy to static HTML使用服务器端语言进行开发的最佳方式,但部署到静态 HTML
【发布时间】:2010-11-12 05:25:26
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • CGI 仍然是一种选择吗?大多数人忽视了它的可用性,因为它被其他服务器端脚本所取代,但我发现在这种情况下(因为我以前也经历过这种情况),CGI 通常是一种选择。
  • 不幸的是,没有。只有 HTML、XML、JS、CSS、Flash 和图像

标签: php html templates kohana


【解决方案1】:

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

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

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

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

【讨论】:

  • 他们是一家银行,出于安​​全原因,他们完全拒绝托管由第 3 方(我们)开发的网站,该网站使用服务器端组件构建。这已经被他们多次提出,答案是非常明确和肯定的NO。这不是对新的解决方案视而不见,这是我们必须面对的情况。谷歌齿轮并不适合模板(也不是在客户端做这一切)。使用自定义脚本导出站点似乎是唯一的方法,但我一直在寻找好的方法,特别是如果它们与 Kohana 集成。
  • 另外,我不是在寻找一个单一的答案,只是解决问题的任何好方法。
  • 让我有点好奇 - 为什么银行想要一个没有任何动态内容的网站?
  • micmcg:我怀疑当银行说“不”时,他们是在使用特定技术(无论可能是什么)从不正确的参考框架中做出响应,因此拒绝所有“服务器端技术” ,或者出于兼容性原因,他们可能更愿意避免所有服务器端技术(即,可以随时切换到任何主机),两者都是没有根据的,我可以说我很高兴我不是你的鞋子!他们可能有充分的理由,但是,明智的做法是了解它们是什么,尽管可能必须等到项目完成后,因为您已经详细讨论了这一点。
  • @jimyi - 想想产品广告微型网站,而不是他们的核心网站。
【解决方案2】:

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

好吧,您可以在开发应用程序中制作页面,在浏览器中加载这些页面,然后保存生成的 html。对所有页面执行此操作即可。

只要确保链接指向正确。

【讨论】:

  • 这属于蜘蛛伞下,不幸的是感觉不够可靠。
  • 您预见到什么样的问题?
  • 虽然没有由服务器端语言动态生成的内容,但内容是使用 javascript 动态添加到页面中的,我担心网站的简单爬取会错过其中的一些内容。该站点足够大,因此在浏览器中打开每个页面并将其保存是不可接受的解决方案。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      试试WaveMaker Studio。它将部分解决您的问题。

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

      HTH

      【讨论】:

        【解决方案6】:

        我使用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)很快出现,将标记为已接受。谢谢!
        猜你喜欢
        • 2015-10-30
        • 2011-01-23
        • 1970-01-01
        • 1970-01-01
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        相关资源
        最近更新 更多