我正在考虑一种向所有网页添加导航栏的方法,当我更新文件时,所有页面也应该更新。
我在Google上研究了一段时间,我找到的是:
PHP
SSI
(我甚至不知道这是什么) JavaScript
但哪一个最好?有人可以解释SSI
是什么吗?
答案 0 :(得分:2)
SSI(服务器端包含)已过时。我建议不要使用它们。 JavaScript可以工作,但是您的浏览器必须下载一个额外的文件才能构建页面。此外,禁用JavaScript的用户将无法浏览您的网站。使用JavaScript构建页面真的没有意义,所以除非你想要特效,否则不要使用它。
PHP是最好的选择。您只需将导航脚本包含在页面顶部,如include_once('nav.php');
。
答案 1 :(得分:1)
But which one is the best
这取决于您在网站上使用的内容。
如果它写在PHP上,那么最好使用php进行包含。通过模板或代码中正确位置的简单include('file_with_nav_bars_code');
,您可以通过上述文件插入静态html代码或生成的代码。
SSI(服务器端包含)适用于“静态”页面。它就像一个简单的脚本,可以在一些设置后由服务器完成。如果检查Apache服务器错误页面的模板,您将看到SSI指令,其中包括页脚,标题,输出一些基本信息,如时间,请求的URL等。包含一些代码看起来像<!--#include virtual="/file_with_nav_bars_code" -->
,就像你可以包含一些CGI脚本一样<!--#exec cgi="/cgi-bin/example.cgi" -->
在这里阅读更多http://httpd.apache.org/docs/2.0/howto/ssi.html和http://en.wikipedia.org/wiki/Server_Side_Includes
javascript也适用于静态页面。您必须加载javascript代码,该代码将“生成”您需要的html代码并将其输出到您想要的页面上的位置。它有一个严重的负面影响 - 搜索引擎将无法跟随js生成的链接,因为它们不会运行它(因为关闭了js的访问者,但我不知道这样的情况。甚至Opera mini也能够渲染简单的js输出结果)。简单的方法是将js脚本包含在您想要导航栏的位置:
<script src='nav_bar.js'></script>
和nav_bar.js
您将(作为一个非常简单的示例)这样的内容:document.write('some html code of the bar here, with escaped new lines and quotes');
ps:多年的经验我已经尝试了所有这些:)我在早期静态页面使用了js和SSI,现在我只使用php和其他服务器端脚本语言。你仍然可以使用javascript与php生成的页面,但对于SSI,你必须告诉web服务器再次传递php的输出,寻找SSI指令而不是将其返回给浏览器。
答案 2 :(得分:1)
PHP可以正常工作,但使用它意味着你必须设置一些不同的东西,包括做以下事情:
.html
个文件重命名为.php
.php
文件require
SSI(服务器端包含)是一些没有人使用的古老东西。不要使用它们。但如果你很好奇,请看看mod_include。
客户端javascript可以起作用,但你最好在服务器上做这种事情。
以下是其他一些需要考虑的选项。
PHP不是唯一的服务器端语言。您可能更喜欢python,ruby,服务器端javascript等。
XSL转换非常适合这种模板,可以通过浏览器或服务器应用。跨浏览器的支持很好,并且已经有一段时间了。像“noscript”这样的扩展会在某些浏览器中破坏XSL转换,因此在可能的情况下,通常首选在服务器上应用它们。
您可以简单地将导航放在单独的HTML文件中,并将其包含在每个页面的iframe
中。只能将此作为最后的手段。如果你不能使用服务器端语言,不能或不想使用XSLT,并且页面相对较少,这可能会正常工作。否则,不要这样做。
答案 3 :(得分:0)
SSI 代表服务器端包含,这意味着您的文件将包含相同的文件(例如导航栏),因此当您对该文件进行任何更改时,它会反映在你的所有页面中。
PHP和javascript是两回事,PHP是服务器端语言,而javascript是客户端语言。
如果你只想要一个导航栏,PHP就足够了。但是如果你想添加任何客户端功能,比如弹出菜单下的部分和类似的东西你也必须使用javascript。
答案 4 :(得分:0)
SSI仍然适用于使用v函数或%的现代服务器(在Apache / 2.4.18上测试)。
示例(nav include):
<!--#include file="nav.html" -->
示例活动菜单项(如果对文档名称进行测试):
<!--#if expr='v("DOCUMENT_NAME")=~/about.html/'-->
<a class="active" href="#">
<!--#else -->
<a href="about.html">
<!--#endif -->
About</a>
示例2(如果在文档路径上进行测试):
<!--#if expr="%{DOCUMENT_URI} =~ /product/"-->
Product path
<!--#else-->
Some other path
<!--#endif-->
.htaccess让SSI正常工作(例子):
AddType text/html .shtml
AddHandler server-parsed .html
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes
较旧的Apache版本使用不同的expr语法。