Php active menu class

Как добавить в html-меню с php

Я хочу поместить мою html-навигацию в отдельный php-файл, поэтому, когда мне нужно ее отредактировать, мне нужно только отредактировать ее один раз. Проблема начинается, когда я хочу добавить класс активным на активную страницу.

У меня есть три страницы и один общий файл.

index.php: все три страницы идентичны, за исключением того, что их страница $ отличается на каждой странице.

Это просто не сработает, если я не ставил свою навигацию на каждую страницу, но тогда вся цель отделения навигатора со всех страниц разрушена.

Это то, что я хочу сделать даже возможным? Что я делаю не так?

EDIT: При этом код php внутри li не работает, он просто печатается, как если бы он был html

Ваш код index.php верен. Я включаю обновленный код для common.php ниже, тогда я объясню различия.

Первая проблема заключается в том, что вам нужно убедиться, что объявление конца для вашего heredoc – EOD; – не имеет отступов. Если он отступил, вы получите ошибки.

Что касается вашей проблемы с кодом PHP, который не работает в инструкции heredoc, это потому, что вы смотрите на это неправильно. Использование инструкции heredoc не совпадает с закрытием тегов PHP. Таким образом, вам не нужно пытаться их повторно открыть. Это ничего не сделает для вас. Способ работы синтаксиса heredoc заключается в том, что все между открытием и закрытием отображается точно так же, как написано, за исключением переменных. Они заменяются соответствующим значением. Я удалил вашу логику из heredoc и использовал третичную функцию, чтобы определить класс, чтобы это стало легче видеть (хотя я не верю, что любые логические утверждения будут работать в heredoc в любом случае)

Чтобы понять синтаксис heredoc, это то же самое, что и включение в двойные кавычки («), но без необходимости экранирования. Таким образом, ваш код также может быть написан следующим образом:

Это будет делать то же самое, просто написано несколько иначе. Другое отличие между heredoc и строкой состоит в том, что вы можете выйти из строки в середине, где вы не можете в heredoc. Используя эту логику, вы можете создать следующий код:

Затем вы можете включить логику непосредственно в строку, как вы изначально предполагали.

Какой бы метод вы ни выбрали, очень мало (если есть) разница в производительности скрипта. В основном это зависит от предпочтений. В любом случае, вам нужно убедиться, что вы понимаете, как все работает.

почему бы вам не сделать это так:

Фактически вы сможете контролировать, где на странице, на которую вы отправляете навигацию, и какие параметры вы передаете ей.

Позже отредактируйте: исправлена ​​синтаксическая ошибка.

Это очень простое решение этой проблемы.

Я думаю, вам нужно поставить ваш $page = ‘one’; выше require_once. В противном случае я не понимаю вопроса.

Я знаю, что это старо, но ни один из этих ответов не очень хорош (sry ppl)

ЛУЧШИЙ способ сделать это (без написания свернутых классов) – сравнить текущий $ _SERVER [‘REQUEST_URI’] с href ссылки. Ты почти там.

Почему бы вам не создать функцию или класс для этой навигации и не разместить там активную страницу в качестве параметра? Таким образом, вы бы назвали это, например:

$navigation = new Navigation( 1 ); 
  1. $page=’one’ должно произойти, прежде чем require_once() не будет после. Слишком поздно – код уже требуется, и $nav уже определен.
  2. Вы должны использовать include(‘header.php’); и include(‘footer.php’); вместо того, чтобы на раннем этапе устанавливать переменную $nav . Это повышает гибкость.
  3. Сделайте больше функций. Что-то вроде этого действительно облегчает работу:
function maybe($x,$y) function aclass($k)

Решение, которое я использую, является следующим и позволяет вам установить активный класс на php-страницу.

Дайте каждому из ваших пунктов меню уникальный класс, я использую .nav-x (nav-about, here).

В верхней части каждой страницы (about.php здесь):

В другом месте (header.php / index.php):

Просто измените .nav-about > a на страницу, .nav-forum > a , например.

Если вам нужен другой стиль (цвета и т. Д.) Для каждого элемента навигации, просто присоедините встроенный стиль к этой странице, а не страницу индекса / заголовка.

отделите свою страницу от навигационной панели.

$page="one"; include("navigation.php"); 

Я обнаружил, что также могу установить заголовок моих страниц с помощью этого метода.

 $page="one"; $title="This is page one." include("navigation.php"); 

и просто возьмите $ title var и поместите его между тегами «title». Хотя я отправляю его на мою заголовочную страницу над моей навигационной панелью.

Вы можете использовать этот PHP, надеюсь, что это поможет.

Таким образом, список будет выглядеть следующим образом.

Источник

Как добавить класс active в html меню на php

как добавить стиль в меню на php чтобы выделить активный пункт

Если вам захочется оформить навигационное меню таким образом чтобы при открытии какой то конкретной странички меню этой странички как то подсветилось (выделилось), то тут понятное дело решение может быть только с помощью стилей – CSS. Но как же таблица стилей поймет, какая страничка у нас сейчас открыта? Давайте разберемся. И так, если мне не изменяет память, то решить этот вопрос можно двумя методами. О первом я прочел у гуру верстки Эрика Мэера. В его способе нет надобности в программировании. Там суть заключается в том, что каждой страничке присваивается свой id для тега body, например

Теперь глянем как добавить класс active в меню средствами PHP. Этот вариант я считаю самым удобным и простым. И так, наверняка меню у вас в ваши странички подключается includ-ом во все ваши странички. Тогда остается перед include завести какую-нибудь переменную – метку, которая и будет тем флажком указывающем на определенную страничку:

Тогда подключаемый файл с меню – menu.php будет выглядеть следующим образом:

Т.е. как мы видим, тут идет проверка в сокращенной записи условия соответствия. Если есть совпадение, то к ссылке добавляется иначе ничего не приписывается. Вроде все просто и логично.

Еще в процессе написания заметки нашел альтернативный метод на php:

Здесь, как я понимаю меню формируется динамически. В GET параметре [‘menu’] мы передаем id меню, и в цикле проверяем совпадение с id лежащем в массиве $result. Т.е. в ассоциативном массиве $result лежат названия и ссылки нашего меню, например $result[1] = (id=>1, name=>’About’), $result[2] = (id=>2, name=>’News’) и так далее. Если id совпали то при формировании меню, для данного id присвоится класс active.

И напоследок вариант на jQuery:

Здесь все просто. Пробегаемся по ссылкам меню, и читаем их атрибут href, который затем сравнивается с частью URL. Например смотрим что ссылка в меню About, берем /about, добавляем его к конец URL site.ru/about и проверяем с помощью window.location.href есть ли совпадение. Если есть то добавляется класс active. Вообщем тоже вариант довольно простой.

Таким образом, перед вами несколько вариантов ответов на вопрос как добавить класс active в html меню на php и также на jQuery. Думаю наверняка есть еще варианты, и я буду признателен если кто-то поделится своим вариантом.

Источник

Класс active в меню на php, присваивание класса при клике

Занимаясь натягиванием шаблона на сайт появилась у меня задача , чтобы при клике на меню добавлялся к нему класс ACTIVE. Но вот не задача в html версии все работало, а в на сайте php нет из-за того что страница перезагружалась. Погуглив это дело я пришел к выводу что решении не так уж и много. И так всего варианта 3.
Вариант 1. Скрипт на php И так у каждого раздела есть свое меню. Допустим у нас будет 3 ссылки — Главная Новости и о Сайте у которых названия / или index , news, about. Тогда наше подключенное меню будет выглядеть следующим образом

Тут ничего сложного если в параметре глобального массива $_GET[‘page’] будет содержаться какое либо из параметров то добавляется класс active. Вариант 2. Массив и Цикл Следующий вариант похожий на первый только с массивом.

Массив $result в котором забиты название меню и их id. Для каждой ссылки создается ссылка с id меню, далее проверяется совпадает содержание глобального массива $_GET[‘menu’] и id какой либо ссылки. Если параметры совпали то добавляется класс active. Единственное НО в этом скрипте что если вы тока зашли на сайте и глобального массива еще не существует то класс active не добавится к ссылке Главная. Но это решается путем добавления доп условия при котором если массив не существует то добавлять класс к ссылки с (Условный Id ссылки ГЛАВНАЯ, у вас она может быть любая другая, но как правило ссылки Главная первая в списке и нулевая по индексу) Вариант 3. JavaSctipt (Jquery библиотека) В этом варианте JS проверяет параметр href у вашего меню и адресом вашего сайта и сравнивает его с текущем адресом открытой страницы. Если параметры совпадают то добавляется класс ACTIVE к текущей ссылке.

Пример у вас ссылка вида НОВОСТИ. Скрипт проверяет href параметр добавляя адрес получается site.ru/news и сравнивает адрес в браузере если все ок то добавляет. Опять же таки скрипт не универсален т.к. при каждой смене доменного имени придется лезть и менять адрес сайта. Не каждый этим будет заниматься. До опять если ссылка не имеет не какого адреса кроме домена не будет подствечиваться Главная. я скрипт немного переделал в JS я не силен поэтому сделал пару if

$('document').ready(function() < $('.buttons li a').each(function() < if (location.protocol+"//"+location.hostname+'/'+$(this).attr('href') == window.location.href) < $(this).addClass('active'); >if (location.protocol+"//"+location.hostname+$(this).attr('href') == window.location.href) < $(this).addClass('active'); >>); >);

В этом же скрипте уже ничего менять не надо ссылки универсальны под ссылки из примера. Единственное что параметр href ссылки на главную будет ‘/'(слешем).

Последний вариант который пришел мне во время написания этой статьи это сделать ваш сайт при помощи JQuery. Загрузку данных без перезагрузки страниц.

Источник

Как добавить в html меню с помощью php

Я хочу поместить мою html-навигацию в отдельный файл php, поэтому, когда мне нужно ее отредактировать, мне нужно только ее отредактировать. Проблема начинается, когда я хочу добавить класс активным на активную страницу. У меня есть три страницы и один общий файл. common.php:

index.php: Все три страницы идентичны, за исключением того, что их страница $отличается на каждой странице.

Это просто не сработает, если я не поместил свой навигатор на каждую страницу, но тогда вся цель ветки навигатора со всех страниц разрушена. Я хочу, чтобы это было возможно? Что я делаю неправильно? Спасибо EDIT: при этом PHP-код внутри li не работает, он просто печатается, как если бы он был html

Во-первых, PHP не анализируется в строках heredoc (только переменные), а во-вторых, закрывающий идентификатор (т. Е. EOD) должен находиться в начале строки.

да, извините, я знаю это, думал, что будет легче читать это так. EOD находится в начале строки в моем коде, это не проблема. Моя проблема в том, что он печатает именно то, что находится в EOD, а также php.

12 ответов

Ваш код index.php верен. Я включаю обновленный код для common.php ниже, тогда я объясню различия.

Первая проблема заключается в том, что вам нужно убедиться, что конечная декларация для вашего heredoc — EOD; — не имеет отступов вообще. Если он отступил, вы получите ошибки.

Что касается вашей проблемы с кодом PHP, который не работает в инструкции heredoc, это потому, что вы смотрите на это неправильно. Использование инструкции heredoc не совпадает с закрытием тегов PHP. Таким образом, вам не нужно пытаться их повторно открыть. Это ничего не сделает для вас. Способ работы синтаксиса heredoc заключается в том, что все между открытием и закрытием отображается точно так же, как написано, за исключением переменных. Они заменяются соответствующим значением. Я удалил вашу логику из heredoc и использовал третичную функцию, чтобы определить класс, чтобы это стало легче видеть (хотя я не верю, что любые логические утверждения будут работать в heredoc в любом случае)

Чтобы понять синтаксис heredoc, это то же самое, что и включение в двойные кавычки («), но без необходимости экранирования. Таким образом, ваш код также может быть написан следующим образом:

Он будет делать то же самое, просто написан несколько иначе. Другое отличие между heredoc и строкой состоит в том, что вы можете выйти из строки в середине, где вы не можете в heredoc. Используя эту логику, вы можете создать следующий код:

Затем вы можете включить логику непосредственно в строку, как вы первоначально предполагали.

Какой бы метод вы ни выбрали, очень мало (если есть) разница в производительности script. В основном это зависит от предпочтений. В любом случае, вам нужно убедиться, что вы понимаете, как они работают.

Источник

Читайте также:  Css стили для чата youtube
Оцените статью