【问题标题】:Offline HTML templating processor for Windows [closed]适用于 Windows 的离线 HTML 模板处理器 [关闭]
【发布时间】:2009-01-14 21:11:29
【问题描述】:

我正在教我的朋友如何制作网站。我想让网站保持静态,这样他就不必[还] 必须学习 PHP,不必担心在他的 Windows 机器上进行测试,担心服务器配置、安全性等。不好的是,如果没有一些工具支持,他会不得不重复很多代码,例如每一页的菜单块几乎是一样的。有什么简单的工具可以帮助他吗?

我想要在 Windows 上运行而无需太多工作的东西,即。没有 Perl、Cygwin、IIS、PHP 等。 (一个简单的 GUI 工具或对此有一些特殊支持的文本编辑器会很好。)我想要一些不需要保持单独的“源”和“构建”文件版本的东西,即。带有一些特殊标记的源文件和带有常规 HTML 的构建文件。 (我讨厌在每次更改代码后重新制作整个东西。)我想要一些免费且简单的东西。

有这种事吗?


更新:我梦想着能像这样工作的东西:

$ cat page.html
<h1>A page</h1>
<!-- insert menu -->
<!-- menu ends -->
$ cat menu.tmpl
<ul id="#menu">…</ul>
$ update-templates page.html && cat page.html
<h1>A page</h1>
<!-- insert menu -->
<ul id="#menu">…</ul>
<!-- menu ends -->
$ echo "Moo" > menu.tmpl
$ update-templates page.html && cat page.html
<h1>A page</h1>
<!-- insert menu -->
Moo
<!-- menu ends -->

...仅在 GUI 中。顺便说一句:感谢 JavaScript 解决方案。我没有想到这些,但即使关闭 JS,网站也必须工作。


更新:由于我没有找到任何现有的解决方案,我将脚本编写为 Google Code project。有一些怪癖需要处理(例如不同系统上的不同行尾),但模板替换的东西有效。该脚本需要 Perl,否则您只需双击图标即可更新 HTML 源代码。

【问题讨论】:

    标签: html templates


    【解决方案1】:

    最简单的可能是(尽管需要进行一些设置)带有服务器端包含的 Web 服务器。这是我能想到的最简单的模板形式,如果您不想从某种来源“构建” html 文件,那么您需要能够主动服务请求的东西。

    不知道有没有标准化,Apaches SSI 是这样的:

    <!--#include file="menu.html" -->
    

    希望对您有所帮助。

    编辑:
    我确信没有单独的源和目标/构建文件,如果没有活动的服务器就不可能实现。但是,当您评论评论标记时,我想到了一个想法,构建一个包含文件的简单 perl 脚本应该不难,替换开始评论标记和结束评论标记之间的所有内容。你还说你不想和 perl 混在一起,那是不是包含了一个他只需要执行的准备好的 perl 脚本?

    编辑 2
    使用 /e-regexp 修饰符的简单几行 perl 脚本就足够了,因为你使用的是 windows 我不知道你是否可以使用像 cat $file 这样的反引号,所以我添加了一个 readfile 子。

    sub readfile($) {
      open(FILE, 'r', shift);
      my $buffer;
      read (FILE, $buffer, 2 ** 20); # one megabyte maximum.
      close(FILE);
      return $buffer;
    }
    sub writefile($$) {
      open(FILE, 'w', shift);
      print FILE shift;
      close(FILE);
    }
    
    for my $file(@ARGV) {
      my $content = readfile($file);
      $content =~ s/\<!--\s+include\s+(\S+\)\s+--\>.*?\<!--\s+end\s+\1\s+--\>/"<!-- include $1 -->".readfile($1)."<!-- end $1 -->"/ge;
      writefile($file, $content);
    }
    

    但要小心,崩溃或有点贪婪的替换(可能是由于拼写错误)会杀死整个文件,而这无需维护源文件。我也不确定 LHS 是否会与反向引用正确匹配,我需要调查一下。

    【讨论】:

    • 海报说机器上没有服务器。
    • 我希望我能找到一个工具,它使用单个文件作为源和构建目标,可能带有一些简单的注释标记。 SSI 不会让他在他的机器上检查网站(不安装网络服务器)。
    • 是的,如果没有其他解决方案,我可能会这样解决。
    【解决方案2】:

    我过去设置了类似的东西。我只将我的内容编写为一系列 HTML 文件,而不用担心 &lt;html&gt;&lt;head&gt;&lt;body&gt;、菜单等 - 只是内容。 PHP 脚本读取该目录中的所有文件并执行一些非常简单的模板(字符串替换)来创建输出文件。我知道您说过您希望避免使用源代码和构建版本,但这种方法实际上非常简单,因为脚本会自动找到您的所有源文件。另外,您可以从命令行(或作为批处理文件)运行脚本,因此您无需费心设置服务器或任何东西:只需下载 php 并将其解压缩到目录中。这是我的意思的一个非常粗略的想法:

    模板文件:page.tpl

    <html>
    <head> ... whatever ...</head>
    <body>
        <div id="menu">
            Item 1
            Item 2
            (this could even be generated automatically from the files)
        </div>
        <div id="content">
            <!-- CONTENT -->
        </div>
    </body>
    </html>
    

    内容页src/page1.txt

    <p>This is my page content.</p>
    

    PHP 脚本伪代码:

    $template = get_contents(page.tpl)
    for each of the .txt files in the src directory {
        $c = get_contents($file)
        write(string_replace("<!-- CONTENT -->", $c, $template)) into page1.html
    }
    

    运行脚本:

    $ php script.php
    

    当然,这适用于您选择的任何语言。

    【讨论】:

      【解决方案3】:

      这是一种变通方法。

      您可以使用 JavaScript 包含,并包含本地文件。不过,您必须通过 JavaScript 将 HTML 插入文档中的正确位置。学习如何做到这一点本身可能是一个坏主意。不过,在包含文件中转义引号可能会让人头疼。

      文件:

      <p id='moo'></p>
      <script type="text/javascript" src="moo.js"></script>
      

      moo.js:

      $('moo').innerHTML="hello world"
      

      (我正在使用Prototype 快捷方式)

      【讨论】:

        【解决方案4】:

        如果你愿意花一些钱,那么Adobe Dreamweaver 有一些相当不错的template 功能,就像你描述的那样工作。

        【讨论】:

          【解决方案5】:

          良好的旧复制和粘贴以将公共元素从一页转移到另一页有什么问题吗?或者更好的是,创建一个简单的文本文件,其中已经安排了所有常见元素,然后当他想要创建一个新页面时,只需复制该文件并重命名该副本。

          【讨论】:

          • 如果我可以在没有太多魔法的情况下实现自动化,我宁愿把枯燥的工作留给机器。
          • 复制和重命名工作量太大?
          • 想象一下,您想在菜单中进行简单的更改,并且必须手动更改 10 个文件。这很快就会变老。这没什么大不了的,但如果有一个简单的方法,我会使用它。
          • 啊...我看到了您遇到的问题。在那种情况下,我认为您可能是没有包含的 SOL。
          【解决方案6】:

          在 apache 建议上搭便车:我认为 Windows 有一个您可以安装的“个人”IIS 服务器。放入足够多的 javascript 以获取每个页面上的重复块并更新粘贴的占位符标记上的内部 html。

          可能想给他一个漂亮的 CSS 文件并包含要粘贴的行。

          【讨论】:

            【解决方案7】:

            安装 tomcat :-)

            如果这很可口,请不要使用 java 代码,只需给你的朋友一个神奇的秘诀,将 include 调用放入带有有趣 jsp 后缀的“神奇”html 文件中???

            好的,这和设置 PHP 差不多,不是吗。

            如果您想生成某些东西,您可能需要一些软件来完成它。我不知道你的“疼痛阈值”是多少。

            【讨论】:

              猜你喜欢
              • 2013-07-07
              • 1970-01-01
              • 2011-08-07
              • 1970-01-01
              • 2011-05-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多