Intereting Posts
Лучший способ хранения JSON в атрибуте HTML? Модель аутентификации для приложения Android TCPDF: когда-нибудь добавьте новую страницу, а затем переполнение содержимого следующей страницы Как правильно использовать сеансы для динамических страниц Загрузка шаблона сопоставления файлов с использованием phpseclib Значение Textarea не отображается на объекте $ _POST. Какова наилучшая практика для доступа к конфигурации внутри функции? Проблемы с методом POST в PHP MODx :: Получить идентификатор сеанса, установленный MODx для использования в модуле У меня есть класс с 14 статическими методами и 4 статическими свойствами – это плохо? Ограничение левого соединения для возврата одного результата? PHP: как предотвратить нежелательные разрывы строк Как проверить сайт с помощью Google Analytics или нет CURL? isset ($ var) vs. @ $ var Выберите работы, Вставка в mysql не вставляется с php

Включая общий html-заголовок на всех страницах сайта на 20 страницах (с активным классом)

Предположим, у меня есть 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.

  1. Сначала вы создаете все страницы в виде файлов php.

  2. Создайте один файл как nav_menu.php. На этой странице введите все пункты меню.

  3. На всех страницах вместо кодов меню есть nav_menu.php

  4. Чтобы использовать активный класс, используйте $_SERVER["SCRIPT_NAME"] чтобы проверить, что текущий url равен определенному URL-адресу. Если он равен, добавьте класс active.