2

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

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

但是哪一个是最好的?有人能解释一下SSI是什么吗?

4

5 回答 5

2

SSI(服务器端包含)已过时。我建议不要使用它们。JavaScript 可以工作,但您的浏览器必须下载一个附加文件才能构建页面。此外,禁用 JavaScript 的人将无法浏览您的网站。使用 JavaScript 来构建页面确实没有意义,所以除非你想要特殊效果,否则不要使用它。

PHP 是最好的选择。您只需在页面顶部包含导航脚本,例如include_once('nav.php');.

于 2012-02-18T03:28:34.353 回答
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,您必须告诉网络服务器再一次传递 php 的输出以查找 SSI 指令,而不是将其返回给浏览器。

于 2012-02-18T03:29:47.080 回答
1

PHP

PHP 可以正常工作,但使用它意味着您必须进行一些不同的设置,包括执行以下操作:

  • 在您的服务器上运行 PHP
  • .html将文件重命名为.php
  • 更改链接以指向.php文件
  • 至少对 PHP 有足够的了解以使用require

SSI

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

Javascript

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


这里有一些其他选项需要考虑。

另一种服务器端语言

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

XSLT

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

iframe 破解

您可以简单地将导航放在一个单独的 HTML 文件中,并将其包含iframe在每个页面上。仅将此作为最后的手段。如果您不能使用服务器端语言,不能或不想使用 XSLT,并且页面相对较少,这可能会正常工作。否则,不要这样做。

于 2012-02-18T03:49:04.943 回答
0

SSI代表服务器端包含,这个概念意味着您的文件都将包含同一个文件(例如导航栏),因此当您对该文件进行任何更改时,它将反映在您的所有页面中。

PHP 和 javascript 是两个不同的东西,PHP 是一种服务器端语言,而 javascript 是一种客户端语言。

如果你只想要一个导航栏,PHP 就足够了。但是,如果您想添加任何客户端功能,例如在部分下的弹出菜单之类的东西,您也必须使用 javascript。

于 2012-02-18T03:29:13.213 回答
0

SSI 仍然适用于使用 v 函数或 % 的现代服务器(在 Apache/2.4.18 上测试)。

示例(导航包括):

<!--#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 语法。

于 2017-06-30T10:41:27.723 回答