我正在教我的朋友如何制作网站。我想让网站保持静态,这样他就不必学习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源代码。
答案 0 :(得分:2)
最简单的可能是(虽然它需要一些设置)一个带服务器端包含的Web服务器。这是我能想到的最简单的模板形式,如果你不想从某种来源“构建”html文件,那么你需要一些主动服务请求的东西。
我不知道它是否标准化,但Apaches SSI看起来像这样:
<!--#include file="menu.html" -->
希望有所帮助。
修改:
我确信没有单独的源和目标/构建文件,没有活动服务器就无法实现。但是,当你评论评论标记时,一个想法让我感到震惊,构建一个包含文件的简单perl脚本并不难以替换start-commment标记和end-comment标记之间的所有内容。你还说过你不想搞砸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是否与反向引用正确匹配,我需要研究一下。
答案 1 :(得分:2)
我过去也设置过类似的东西。我只将我的内容写为一系列HTML文件,而不必担心<html>
,<head>
,<body>
,菜单等 - 只是内容。 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
当然,这适用于您选择的任何语言。
答案 2 :(得分:1)
这是一种解决方法。
您可以使用JavaScript包含,并包含本地文件。您必须通过JavaScript将HTML插入到文档中的正确位置。学习如何做到这一点本身可能是一个坏主意。尽管如此,在包含文件中转义引号可能是一种痛苦。
文件:
<p id='moo'></p>
<script type="text/javascript" src="moo.js"></script>
moo.js:
$('moo').innerHTML="hello world"
(我正在使用Prototype个快捷方式)
答案 3 :(得分:1)
如果你愿意花一些钱,那么Adobe Dreamweaver有一些非常好的template功能,就像你描述的一样。
答案 4 :(得分:0)
旧的复制和粘贴是否有问题,以便将常用元素从一个页面转移到另一个页面?或者更好的是,制作一个简单的文本文件,其中已经安排了所有常用元素,然后当他想要创建一个新页面时,只需复制该文件并重命名该副本。
答案 5 :(得分:0)
搭便车的建议:我认为Windows有一个可以安装的“个人”IIS服务器。添加足够的javascript来获取每个页面上的重复块并更新粘贴的占位符标记上的内部html。
可能想要给他一个不错的CSS文件,并包括要粘贴的行。
答案 6 :(得分:0)
安装tomcat: - )
如果这是可口的,请不要使用java代码,只需给你的朋友一个神奇的秘诀,把include调用放在带有搞笑的jsp后缀的“魔术”html文件中???
好的,这与设置PHP大致相同,不是吗。
如果你想要生成某些东西,你可能需要一些软件来完成它。我不知道你的“痛苦门槛”是什么。