2009-01-14 22 views
0

我在教我的朋友如何製作網站。我想保持這些網站是靜態的,這樣他就不必學習PHP,擔心在他的Windows機器上測試,擔心服務器配置,安全等等。壞消息是,如果沒有某種工具支持,他會必須重複很多代碼,例如每個頁面上的菜單塊幾乎相同。有沒有簡單的工具可以幫助他?用於Windows的脫機HTML模板處理器

我想在Windows上運行的東西沒有太多的工作,即。沒有Perl,Cygwin,IIS,PHP等。 (一個簡單的圖形用戶界面工具或文本編輯器,對此有一些特別的支持會很好。)我想要一些不需要保存單獨的「源」和「構建」文件版本的東西,即。帶有一些特殊標記的源文件和使用常規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源代碼。

回答

2

最簡單的可能是(儘管它需要一點設置)一個帶有服務器端包含的Web服務器。這是我能想到的最簡單的模板形式,如果您不想從某種源「構建」html文件,那麼您需要一些主動提供請求的東西。

我不知道,如果它是標準化的,但阿帕奇SSI看起來是這樣的:

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

希望有所幫助。

編輯:
我確信不具有單獨的源和目標/構建文件它會是不可能實現的,而不活動服務器。但是,當您評論有關評論標記的想法讓我感到震驚時,構建一個包含文件的簡單perl腳本應該不會很困難,它將替換開始 - 提交標記和最終評論標記之間的所有內容。你還說過你不想混淆perl,是否包含他只需要執行的準備好的perl腳本?

EDIT 2
使用/ e-正則表達式修飾符可能是足夠的,因爲你使用的是Windows,我不知道你是否可以使用反引號像cat $file,所以我加了一個簡單的幾個班輪perl腳本一個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是否與反向引用正確匹配,我需要研究這一點。

0

良好的舊複製和粘貼從一個頁面到另一個頁面的公共元素是否有問題?或者更好的是,製作一個簡單的文本文件,其中包含所有常用元素,然後當他想創建新頁面時,只需複製該文件並重命名該副本。

+0

如果我可以在沒有太多魔法的情況下實現自動化,我寧願將枯燥的工作留給機器。 – zoul 2009-01-14 21:30:40

+0

複製和重命名工作太多? – EBGreen 2009-01-14 21:34:00

1

這是一種解決方法。

您可以使用JavaScript包括,幷包括一個本地文件。不過,您必須通過JavaScript將HTML插入到文檔的正確位置。學習如何做到這一點可能本身就是一個壞主意。在包含文件中轉義引號可能會讓人感到痛苦。

文件:

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

moo.js:

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

(我使用Prototype快捷鍵)

0

搭便車的Apache建議:我認爲Windows有一個 「個人」您可以安裝的IIS服務器。放入足夠的JavaScript來獲取每個頁面上的重複塊並更新粘貼的佔位符標籤上的內部html。

可能想要給他一個不錯的CSS文件,幷包含要粘貼的行。

0

安裝Tomcat :-)

如果這是可口,不使用Java代碼,只是給你的朋友的神奇配方把包括與滑稽的jsp後綴的「神奇」的html文件調用???

好的,這與設置PHP大致相同,是不是。

如果你想要生成一些東西,你可能需要一些軟件來完成它。我不知道你的「痛苦閾值」是什麼。

2

我在過去設置了類似的東西。我只是將我的內容寫成一系列HTML文件,而不用擔心<html>,<head>,<body>,菜單等 - 只是內容。 PHP腳本讀取該目錄中的所有文件,並執行一些非常簡單的模板(字符串替換)來創建輸出文件。我知道你說過你想避免使用源代碼和內部版本,但是這種方法實際上非常簡單,因爲腳本會自動查找所有源文件。另外,你可以從命令行(或者作爲一個批處理文件)運行腳本,所以你不需要去設置一個服務器或者其他任何東西:只需下載php並將其解壓縮到一個目錄中即可。這裏有一個非常粗略的想法,我的意思是:

模板文件:頁面。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 

當然,這將與任何語言工作你的ch oosing。

1

如果你願意花一些錢,那麼Adobe Dreamweaver有一些相當不錯的功能,就像你描述的那樣起作用。