2012-01-24 27 views
5

我對網站建設頗爲陌生。但是在LaTeX和其他一些編程語言方面確實有一些經驗。在網站中包含菜單的良好做法?

我真的嘗試和重用代碼等,所以,建設自己的網站的時候,我想「包括」例如在其他頁面菜單,在明確的複製粘貼它代替。

我知道有幾種方法可以做到這一點:

  • 該菜單是一個靜態頁面,您的內容位於iframe中。這是做這件事最糟糕的方式,因爲它打破了很多東西,比如後退/前進等等(我知道這對某些人來說可能是可以理解的,但對我來說不是這樣)。
  • 這是我現在使用:每個網頁包括使用iframe菜單:

    <iframe src="menu.html" class="menu" height="100%" frameborder="0"></iframe> 
    

    這樣做的缺點的方法是:在菜單沒有得到適當的重新加載,當人們重新審視你的網站,除非你使用一些腳本是明確告訴瀏覽器要做到這一點:

    document.getElementById('some_frame_id').contentWindow.location.reload(); 
    
  • 這是因爲我的新主機我想允許這樣的:包括使用SSI菜單。

    < !--#include virtual="/menu.html"--> 
    

    可能的缺點是每個網頁都必須允許include,因此必須進行解析(這會降低文件系統的速度)。安全對我來說不是問題。

你會推薦什麼?有什麼應該做的禮貌規則? 上述任何方法是否存在兼容性問題?有更好的方法嗎?例如:我懷疑第二種方法(我現在使用它)打破谷歌索引,所以只有我的主頁被索引。 (雖然我不確定這是否是真的)。

+4

不要試圖過早優化。使用SSI,如果出現性能問題,那麼請看看你能做什麼。但我敢打賭,它永遠不會發生。 –

+0

谷歌索引不被蠶食。服務器在將其發送給客戶端之前包含這段HTML,無論是某人的瀏覽器,還是谷歌的抓取工具之一。包含'包含'評論的腳本將永遠不會被髮送。 – bigblind

+0

@JBNizet:好的,我在[本教程中的cgi](http://oreilly.com/openbook/cgi/ch05_02.html)中讀到,這是一個壞主意。我必須說我沒有注意到我已經擁有SSI的網頁中有任何性能問題。是否有關於如何命名頁面的規則/約定(擴展名)?我的支持SSI的頁面現在擴展爲'.shtml',如果我只保留所有'.html'(我知道這會起作用,但可以這樣做),是否有問題? – romeovs

回答

3

要做到這一點的方法是使用像服務器端包括的東西。其他Web開發人員可能使用PHP或Python或某些模板系統,但最終設計模式是HTML輸出重複,但模板系統中的HTML不是。

您對SSI減慢渲染的擔憂是沒有根據的。 SSI速度非常快,Web服務器將採用相同的優化,它將渲染一個頁面;它可以將其緩存在內存中並在運行中處理它。

鑑於你只是想避免重複的HTML,SSI聽起來像是一個很好的途徑,特別是如果你已經對你有效。它的缺點是缺乏先進的編程功能。但速度基本上不會是SSI的問題;它是那裏最快的解決方案之一。它也不會影響Google索引; Google只能看到輸出的HTML,而不是SSI。 SSI是服務器端。

0

1.)管理這個的一個快速方法是使用DreamWeaver模板。任何HTML塊都可以製作成模板。模板可以用於您網站的任何頁面。模板在DreamWeaver中作爲資產進行管理。編輯模板,DreamWeaver將更新網站頁面中使用該模板的所有位置。該工具不是免費的。其他免費技術如下:

2.)速度模板引擎驅動apache.org網站上的大量頁面。您可以使用ANT生成您的網站。 http://velocity.apache.org/engine/devel/webapps.html

3.)如果您正在使用Java進行任何操作...請查看JFS和Facelets。 http://www.ibm.com/developerworks/java/library/j-facelets/

1

在HTML5中,你可以使用對象標籤做到這一點很容易,如

<object data=menu_page.html type="text/html" style="usual css..." ></object> 

您必須指定的位置,寬度和使用CSS的高度。 所以,如果它是結構化的HTML而不是文本的內容,你可以使用style="z-index:-1;position:absolute;top:0;left:0; width:100%;height:100%"

這似乎在最近的瀏覽器兼容

在SSI一些優點(在Safari和Chrome tesing)把它放在一個背景層:

  • 客戶端可以緩存經常重複的頁眉頁腳東西,減少帶寬的使用。
  • 在沒有任何服務器的情況下,您可以在瀏覽器中離線查看您的頁面。