Предположим, у меня есть 20 элементов навигации, каждый из которых связан с другой страницей на моем веб-сайте. И на каждой странице эти 20 предметов остаются неизменными. Чтобы избежать копирования в все .html-файлы, другие решения предложили сделать это с помощью php. Но как я могу сделать активный элемент меню, например, белым? Я хочу воздержаться от копирования вставки заголовка ко всем файлам .html, потому что, если я хочу добавить еще один элемент navbar, мне придется вручную добавить его во все .html-файлы.
Должно быть простое решение с активным элементом для активной страницы.
======== ======== EDIT
Наомик, ваше решение javascript выглядит наиболее перспективным, хотя в настоящее время я не могу заставить его работать ( см. Второе редактирование ниже ).
Моя навигационная панель определена в nav.html:
<nav id="nav" class="navbar navbar-inverse"> <div> <ul id="navigation" class="nav navbar-nav navbar-left"> <li class="active"><a href="about.html" >About</a></li> <li><a href="services.html" >Services</a></li> <li><a href="pricing.html" >Pricing</a></li> </ul> </div> </nav>
И это одна из трех html-страниц (about.html). Я использую JS для загрузки в файл nav.html. Фрагмент JS перед тегом закрывающего тега – тот, который предоставляется наомиком.
<!DOCTYPE html> <html lang="en"> <head> <title>Bootstrap Example</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <script> $.get("nav.html", function(data){ $("#nav-placeholder").replaceWith(data); }); </script> </head> <body> <!-- *** NAVBAR *** --> <div id="nav-placeholder"></div> <!-- *** MAIN TEXT *** --> <h1>ABOUT</h1> <script> function removeQueryString(url) { return url.split('?')[0] } [].forEach.call(document.querySelectorAll('a'), function(elem) { if (removeQueryString(elem.href) === removeQueryString(window.location.href)) elem.classList.add('is-active') else elem.classList.remove('is-active') }) </script> </body> </html>
============ EDIT ==========
Хотя решение Наомика приводит к проблесковому веб-сайту при каждой загрузке страницы. Поэтому я применил решение Relisora.
благодаря
Не делайте этого с PHP. Вы можете добавить немного JavaScript в конец своего HTML до закрытия </body>
Примечание . Щелчок по ссылкам в предварительном просмотре фрагмента не будет работать по понятной причине. Они только там, чтобы показать вам, что будет выделена правильная ссылка.
Фрагменты кода StackOverflow выполняются с URL-адреса
http:stacksnippets.net/js
. Зная это, мы можем проверить, работает ли наш код, убедившись, что ссылкиhref="/js"
получаютis-active
класс.
Прочитав это уведомление выше, нажмите кнопку « Выполнить код» ниже
code { font-family: monospace; background-color: #ccc; padding: 0.25rem; } .is-active { background-color: blue; color: white; } a { display: inline-block; padding: 0.25rem 0.5rem; }
<h4> This window is currently at url:<br> <code>http://stacksnippets.net/js</code> </h4> <a href="/js">js</a> <a href="/html">html</a> <a href="/php">php</a> <p>The <b>js</b> link above gets the is-active CSS class because it matches the window's current pathname</p> <script> [].forEach.call(document.querySelectorAll('a'), function(elem) { if (elem.pathname === window.location.pathname) elem.classList.add('is-active') else elem.classList.remove('is-active') }) </script>
Сначала вы хотите дать каждому из ваших 20 страниц имя (или номер).
На каждой странице напишите название страницы
<?php $page_name = "index" ?>
Затем вы импортируете свою навигационную панель
<?php include 'navbar.php'; ?>
Теперь в вашем navbar.php вы хотите проверить, что такое $page_name
<?php if ($page_name == 'index') {echo ' id="active"';} ?>
И вы делаете это для каждой страницы.
Теперь вы просто захотите иметь #active {}
в своем CSS, чтобы определить стиль, и ваша текущая страница будет отображаться с активным стилем.
Редактировать :
Теперь, когда мы можем написать id="active"
, мы хотим, чтобы он был в li
поэтому мы можем использовать класс:
<li<?php if ($page_name == 'index') {echo ' id="active"';} ?>>Home page</li>
Не забудьте добавить ссылку:
<li<?php if ($page_name == 'index') {echo ' id="active"';} ?>><a href="#" >Home page</a></li>
создайте файл .html с помощью только навигационной панели и включите его в iframe
<iframe src="navbar.html"/>
Вот пример кода PHP, который выполняет итерацию по массиву путей и создает меню.
Если для функции задан активный путь (текущий путь) в качестве входа, он сравнивается с каждым путем, и если они соответствуют ему, добавляет класс в ссылку.
Я жестко закодировал активный путь для демонстрации вывода.
Вы можете связать все это с файлом, называемым nav.php, и включить его на каждую страницу.
<?php include 'includes/nav.php'; ?>
nav.php:
<?php $paths = array( '/foo/', '/foo/bar/', '/foo/baz/', ); function nav($paths, $active_path = null) { $o = ''; foreach($paths as $path) { $a_class = $active_path == $path ? 'active' : ''; $o .= "<a class='$a_class' href='$path'>$path</a><br />\n"; } return $o; } $active_path = strtok($_SERVER["REQUEST_URI"], '?'); $active_path = '/foo/bar/'; ?> <?php echo nav($paths, $active_path); ?>
Вывод:
<a class='' href='/foo/'>/foo/</a><br /> <a class='active' href='/foo/bar/'>/foo/bar/</a><br /> <a class='' href='/foo/baz/'>/foo/baz/</a><br />
Лично, однако, я предпочитаю добавлять активный класс с помощью javascript. В этом случае вы можете просто построить html-фрагмент и воспользоваться поддержкой php include, side side include или js include, чтобы добавить html на каждую страницу.
Прежде всего переименуйте имя файла sample.html с помощью sample.php
просто используйте синтаксис include для php:
<?php include("sample.php"); ?> or <?php require("sample.php");?>
Добавьте это на все 20 страниц после удаления кода.
Надеюсь, это поможет!
Это можно сделать по php.
Сначала вы создаете все страницы в виде файлов php.
Создайте один файл как nav_menu.php. На этой странице введите все пункты меню.
На всех страницах вместо кодов меню есть nav_menu.php
Чтобы использовать активный класс, используйте $_SERVER["SCRIPT_NAME"]
чтобы проверить, что текущий url равен определенному URL-адресу. Если он равен, добавьте класс active.