Navigation Link for "Server Side Includes"
This article was first published in the Possibilities ezine.
Server Side Includes (SSI) technology can be used to include the same content on many pages. But when it is used for including the same navigation menus on every page, there is one big drawback -- the menu item for the current page links to the current page.
While there is nothing intrinsically wrong with that, if
you prefer to have the menu item for the current page be
unlinked (or the menu item omitted altogether) then this
article will show you a way to do that.
This article assumes you have read the "Server Side Includes"
article linked from the article library
or have a working knowledge of the basics of including
content in web pages using SSI.
The pages that include the navigation menu we will create have the same tags they would have for including any text with SSI,
something like this:
<!--#include virtual="menu.shtml"-->
The file being "included", instead of being static text, will
also be parsed as an SSI file. Thus, the name of the file
being included must end in .shtml (or other extension your
hosting company has specified for SSI.)
The balance of this article is about the content and SSI
tags of the file being included, the file that contains the
navigation menu and links.
The SSI tags in the included file, which I'll talk about
presently, mean:
If the menu item is for the current page, print one
thing. Otherwise, print something else.
It takes three different SSI tags to accomplish that. We'll
call them the #if tag, the #else tag, and the #endif tag.
The three tags can be considered to be a set. A set is
required for each navigation menu item.
For example, let's suppose the "Home" menu item refers to
the index.shtml page. When index.shtml is being sent to the
browser, we print [Home] without a link (or print nothing,
if you prefer). However, if some other page is sent to the
browser, we would make the [Home] menu item into a link.
The #if part of the SSI tag set checks to see whether or
the site visitor is currently viewing index.shtml. If s/he
is, then [Home] without a link is printed. Otherwise, the
#else tag kicks in and causes [Home] to be linked and
printed. The #endif tag marks the end of the set.
The #if part of the SSI tag set is the one that requires
the most explanation.
In the example below, you'll see a variable named
$DOCUMENT_URI (yes, "URI" instead of "URL").
The $DOCUMENT_URI is the URL of the current web page
but with everything up to and including the domain
name removed. If the current page happens to be
http://domain.com/index.shtml then the URI is
/index.shtml. Or, if the current page happens to be
http://domain.com/books/sales.shtml then the URI is
/books/sales.shtml
The $DOCUMENT_URI variable contains the URI of the page
currently being viewed. That URI is compared with the URI
of the web page the menu item refers to.
Instead of explaining the whole process with narrative,
here is an example:
<!--#if expr="\"$DOCUMENT_URI\" = \"/index.shtml\"" -->
[Home]
<!--#else -->
<a href="index.shtml">[Home]</a>
<!--#endif -->
The value of $DOCUMENT_URI is compared to /index.shtml. They
are equal to each other only if the page currently being
viewed is index.shtml.
-
If (the #if tag) the value of $DOCUMENT_URI is
/index.shtml, [Home] without the link is printed.
-
Otherwise (the #else tag), [Home] with the link is
printed.
-
The #endif tag marks the end of the set.
The content line below the #if tag and the content line
below the #else tag may be multiple-lines. You're not
restricted to just one line of content.
Use one set of if-then-else SSI tags for each menu item
of your navigation area. Change the URI and link URL of
each set to reflect the page the set's menu item refers
to.
Note that the expression in the first line of the set,
the #if SSI tag line, is enclosed within quotation marks.
Therefore, any quotation marks within that expression must
be escaped with a backslash. Both the $DOCUMENT_URI variable
and the actual URI on the #if SSI tag line are enclosed
within backslashed quotation marks.
That's actually all there's to it.
Simply make a file with one set of if-else-endif SSI tags
for each navigation menu item. Then include that file in
your web pages.
Will Bontrager
©2005 Bontrager Connection, LLC
Please note:
Articles on this website are presented "as is". However -
If you have a question about a CGI script, HTML, CSS, PHP, or JavaScript
Ask one of our Experts and you'll have your answer!
Click here for details.