Як я можу повторно використовувати панель навігації на кількох сторінках?


84

Я щойно закінчив робити свою домашню / index.html сторінку. Зберігати навігаційну панель там, де вона є, і нехай вона залишається, поки користувачі натискають усі мої сторінки. Чи потрібно копіювати та вставляти навігаційний код вгорі кожної сторінки? Або існує інший спосіб зробити це, який виглядав би чистішим?

Навігація по HMTL:

<nav>
    <div>
        <a href="/">
            <div id="logo"><img src="image.png" alt="Home"/></div>
            <div id="headtag"><img src="image.png" alt="Home"/></div>
            <div id="tagline"><img src="image.png" alt="Home"/></div>
        </a>
    </div>
    <div> 
        <a href="/" class="here">Home</a>
        <a href="/about.html" >About</a>      
        <a href="/services.html" >Services</a>          
        <a href="/pricing.html" >Pricing</a>    
        <a href="/contact.html" >Contact Us</a>
        <input id="srchbar" type="search" placeholder="Search">
    </div>
</nav>

Так. Майте на увазі, що коли користувач натискає посилання у вашій навігації, ваш сервер / локальна система надсилає файл, позначений посиланням, для завантаження та відображення. Коли вони натискають "Про програму" about.html, браузер завантажує їх. Тож він повинен містити ту саму навігацію.
Purag

1
якщо у вас мова на стороні сервера, ви можете помістити цей код у шаблон і включити на всі сторінки, інакше використовуйте
angular

3
Я шукаю те саме. Шкода, що в 2017 році ми не можемо зробити це за допомогою веб-сайту на основі клієнта. Корпорація Майкрософт назавжди створила концепцію головної сторінки (_layouts у поточній версії). Здається, "сторінка контейнера" ​​на стороні клієнта не буде смішною.
Рон,

Відповіді:


80

Це мені допомогло. Моя панель навігації знаходиться в тезі body. Увесь код навігаційної панелі міститься у nav.htmlфайлі (без HTML-коду або тегу тіла, лише код навігаційної панелі). На цільовій сторінці це міститься в headтезі:

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

Потім у тегу body створюється контейнер з унікальним ідентифікатором та блоком javascript для завантаження nav.htmlв контейнер, як показано нижче:

<!--Navigation bar-->
<div id="nav-placeholder">

</div>

<script>
$(function(){
  $("#nav-placeholder").load("nav.html");
});
</script>
<!--end of Navigation bar-->

Привіт. Я нічого не знаю про jquery / javascript, але я просто хотів спробувати це. Я намагався зробити саме те, що ти сказав. У мене є навігаційне меню на одній сторінці без будь-яких інших тегів, а решту коду я включив у заголовок / тіло індексної сторінки (проста сторінка індексу). Однак він не завантажує мою панель навігації на всі сторінки. Будь-яка ідея, що я можу зробити неправильно? Дякую !
Покласти

@Lay це взагалі видно? Потрібно сказати вам, що під час розробки (завантаження сторінки локально) цей код часто не працює. Ви розмістили цей код на сервері?
Рамтін,

3
Трохи не в темі, і вибачте за незнання: якщо ви жорстко кодуєте версію jQuery, як це було зроблено у вашій відповіді:, <script src="https://code.jquery.com/jquery-1.10.2.js"></script>то що станеться із вашою сторінкою, коли вийде версія 1.10.3 або 1.11.0?
Laryx Decidua

1
@LaryxDecidua Потім він продовжує працювати. Завжди завантажуючи останню версію, ризикує зламати сторінку. Подумайте про порушення змін між версіями. Тому тестування рекомендується при переході на іншу версію.
Markus Pscheidt

2
Я використав наведений вище код у index.html на локальному ПК, протестований у chrome, це видає мені помилку нижче, і nav.html не вдається завантажити. jquery.min.js:4 Access to XMLHttpRequest at 'nav.html' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.Будь-яка ідея?
KenyKeny

36

Я знаю, що це досить давнє запитання, але коли у вас доступний JavaScript, ви можете використовувати jQuery та його методи AJAX.

Спочатку створіть сторінку з усім вмістом HTML панелі навігації.

Далі використовуйте $.getметод jQuery для отримання вмісту сторінки. Наприклад, припустимо, ви помістили весь HTML панелі навігації у файл, який викликається, navigation.htmlі додали тег заповнювача (як <div id="nav-placeholder">) у свій файл index.html, тоді ви скористаєтесь таким кодом:

<script src="//code.jquery.com/jquery.min.js"></script>
<script>
$.get("navigation.html", function(data){
    $("#nav-placeholder").replaceWith(data);
});
</script>

4

Ви можете використовувати php для створення багатосторінкового веб-сайту.

  • Створіть header.php, в який ви повинні помістити весь свій HTML-код для меню, соціальних мереж тощо
  • Вставте header.php у ваш index.php, використовуючи наступний код

<? php include 'header.php'; ?>

(Наведений вище код скине весь HTML-код до цього) Вміст основного вмісту вашого сайту.

  • Подібним чином ви можете легко створювати нижній колонтитул та інші елементи. Вбудований PHP підтримує HTML-код у своїх розширеннях. Тож краще вивчіть це просте виправлення.

1
То ви всі говорите, що я повинен перетворити все це на PHP, а не на кілька HTML-сторінок для свого сайту? Це мій перший сайт, і я знаю html, ось чому я його використав, але якщо це повинен бути PHP, то це повинен бути PHP .... То який він повинен бути?
blackRob4953

Це дуже базовий php, який ви можете легко вивчити. Ви ніколи не зіткнетеся з кошмарами, коли перетворите свою сторону на мову сервера. Я рекомендую це. Але якщо ви маєте намір використовувати лише html, розгляньте .shtml для дрібних питань, все одно я вважаю це незграбним для зростаючих веб-сайтів.
Sachin Kanungo

Гаразд. Тепер, коли ця сторінка є html. Як перетворити його на php? Це кілька записів чи мені доводиться переробляти всі свої теги? А якщо так, то як .... Тож я не
накручую

1
Змініть розширення на .php і все готово. використовуйте наступні дужки коду для введення php-коду. <?php include 'header.php'; ?>Перейдіть на php.net або w3schools для базового навчання.
Sachin Kanungo

3

Дуже давній, але досить простий прийом - це використання "Включає сторону сервера" , щоб включити HTML-сторінки на сторінку верхнього рівня, яка має .shtmlрозширення. Наприклад, це буде ваш index.shtmlфайл:

<html>
<head>...</head>
<body>
<!-- repeated header: note that the #include is in a HTML comment -->
<!--#include file="header.html" -->
<!-- unique content here... -->
</body>
</html>

Так, це кульгає, але це працює. Не забудьте увімкнути підтримку SSI у конфігурації сервера HTTP ( це як це зробити для Apache ).


3

Brando ZWZ пропонує кілька чудових відповідей щодо вирішення цієї ситуації.

Re: Одна і та ж панель навігації на кількох сторінках 21 серпня 2018 р. 10:13 | ПОСИЛАННЯ

Наскільки я знаю, існує декілька рішень.

Наприклад:

Весь код навігаційної панелі міститься у файлі nav.html (без будь-якого тегу html або body, лише код навігаційної панелі).

Тоді ми могли безпосередньо завантажити його з jquery, не писаючи багато кодів.

Подобається це:

    <!--Navigation bar-->
    <div id="nav-placeholder">

    </div>

    <script>
    $(function(){
      $("#nav-placeholder").load("nav.html");
    });
    </script>
    <!--end of Navigation bar-->

Рішення2:

Ви можете використовувати код JavaScript для створення цілого навігаційного рядка.

Подобається це:

Код Javascript:

$(function () {
    var bar = '';
    bar += '<nav class="navbar navbar-default" role="navigation">';
    bar += '<div class="container-fluid">';
    bar += '<div>';
    bar += '<ul class="nav navbar-nav">';
    bar += '<li id="home"><a href="home.html">Home</a></li>';
    bar += '<li id="index"><a href="index.html">Index</a></li>';
    bar += '<li id="about"><a href="about.html">About</a></li>';
    bar += '</ul>';
    bar += '</div>';
    bar += '</div>';
    bar += '</nav>';

    $("#main-bar").html(bar);

    var id = getValueByName("id");
    $("#" + id).addClass("active");
});

function getValueByName(name) {
    var url = document.getElementById('nav-bar').getAttribute('src');
    var param = new Array();
    if (url.indexOf("?") != -1) {
        var source = url.split("?")[1];
        items = source.split("&");
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            var parameters = item.split("=");
            if (parameters[0] == "id") {
                return parameters[1];
            }
        }
    }
}

HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
    <div id="main-bar"></div>
    <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <%--add this line to generate the nav bar--%>
    <script src="../assets/js/nav-bar.js?id=index" id="nav-bar"></script>
</body>
</html>

https://forums.asp.net/t/2145711.aspx?Same+navbar+on+multiple+pages

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.