Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating reusable html for navigation bar on multiple pages

I thought it would be convenient to have reusable code, especially for the navigation bar because it will be the same across all of my pages. This way I won't have to go through each page and manually edit each one individually when a change occurs.

It seems possible to use iframes, but I tried it and the whole page styling went out of whack. I can fix it but I'm wondering if there's something similar.

It would be awesome if something like this could work:

var navbar = document.getElementById('navbar');
navbar.innerHtml = url('navigation.txt');

I'm currently working offline on my site so I don't think I can make xmlhttp requests. Correct? At least I still have yet to get any ajax example to work. This is unfortunate because I think I could easily use this for my application.

Here's my navbar markup. It's not very complicated so I have a feeling I'll just edit it manually in the end.

<nav>
    <ul id="navbar">
        <li><a href="biosketch.html">Biosketch</a></li>
        <li><a href="projects.html">Class Projects</a>
            <ul>
                <li><a href="projects.html#SeniorProject">Senior Project</a></li>
                <li><a href="projects.html#WindTurbine">Wind Turbine</a></li>
            </ul>
        </li>
        <li><a href="#">Resume</a></li>
        <li><a href="#">Work Experience</a></li>
        <li><a href="#">Contact Me</a></li>
    </ul>
</nav>
like image 231
ptpaterson Avatar asked Jan 05 '11 17:01

ptpaterson


People also ask

How do I navigate multiple pages in HTML?

Linking Between Pages But we need a manner for users to navigate between these pages! Thankfully, we can do this with a simple <a> tag. This is similar to <a> links created in Intro, but with a filepath internal to our project instead of an external online URL.

Can you have 2 nav bars HTML?

Yes, absolutely. You can have multiple header , nav , and footer tags sans penalty.


2 Answers

Like it's been said, typically this is done server side with an include for non AJAX sites. However, I think you can make use of google closure templates. Basically, you define a template in their templating language, that generates a javascript function you can call to render your HTML.

http://code.google.com/closure/templates/docs/helloworld_js.html

Example:

--templates.soy

{namespace templates}

{template .nav}
<ul id="navbar">
    <li><a href="biosketch.html">Biosketch</a></li>
    <li><a href="projects.html">Class Projects</a>
        <ul>
            <li><a href="projects.html#SeniorProject">Senior Project</a></li>
            <li><a href="projects.html#WindTurbine">Wind Turbine</a></li>
        </ul>
    </li>
    <li><a href="#">Resume</a></li>
    <li><a href="#">Work Experience</a></li>
    <li><a href="#">Contact Me</a></li>
</ul>
{\template}

Then you run the following command to compile it into a javascript function

java -jar SoyToJsSrcCompiler.jar --outputPathFormat templates.js  templates.soy

This will generate a file called templates.js containing a function called templates.nav which you can call from your page like the following:

document.getElementById('navbar').innerHTML = templates.nav();

This is not even using the data merging, which would allow you to pass in a data object to render HTML that is not static. But I've only shown you this since it's all you asked for. I know you could just paste the html into a JS string also, but you's have to deal with the lack of syntax help from your editor.

The one drawback is that this requires JS which you don't seem to mind. However, if you wanted to support JS-less clients, you could generate the template on the server side. There is also a compiler that generates Java google closure methods. You can look for it on their website.

Hope it helps.

like image 86
Juan Mendes Avatar answered Sep 30 '22 11:09

Juan Mendes


Use a server side language to create a navigation file. It can be static or it can be extremely complex, it's up to you.

<?php include 'includes/nav.php'; ?>

contents of nav.php can be the <nav> element entirely. You can ideally program it to show/hide elements based on the current "section", and also toggle certain classes based on the section.

like image 41
meder omuraliev Avatar answered Sep 30 '22 12:09

meder omuraliev