在所有页面中包含导航栏的最佳方法是什么?

时间:2012-02-18 03:17:12

标签: php javascript navigation ssi

我正在考虑一种向所有网页添加导航栏的方法,当我更新文件时,所有页面也应该更新。
我在Google上研究了一段时间,我找到的是:

  •  PHP 
  •  SSI (我甚至不知道这是什么)
  •  JavaScript 

但哪一个最好?有人可以解释SSI是什么吗?

5 个答案:

答案 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.htmlhttp://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

PHP可以正常工作,但使用它意味着你必须设置一些不同的东西,包括做以下事情:

  • 在您的服务器上运行PHP
  • .html个文件重命名为.php
  • 更改链接以指向.php文件
  • 至少学习PHP以使用require

SSI

SSI(服务器端包含)是​​一些没有人使用的古老东西。不要使用它们。但如果你很好奇,请看看mod_include

的Javascript

客户端javascript可以起作用,但你最好在服务器上做这种事情。


以下是其他一些需要考虑的选项。

另一种服务器端语言

PHP不是唯一的服务器端语言。您可能更喜欢python,ruby,服务器端javascript等。

XSLT

XSL转换非常适合这种模板,可以通过浏览器或服务器应用。跨浏览器的支持很好,并且已经有一段时间了。像“noscript”这样的扩展会在某些浏览器中破坏XSL转换,因此在可能的情况下,通常首选在服务器上应用它们。

iframe hack

您可以简单地将导航放在单独的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语法。