Как сделать чтобы подсвечивалось активное меню на сайте на РНР-инклудах,

R1
На сайте с 20.04.2017
Offline
30
763

Коллеги, тут упоминались инклуды.

Вопрос несколько не по теме, но у меня проблема.

Делаю сайт на инклудах, точнее на РНР-инклудах. Как сделать таким образом, чтобы подсвечивалось активное меню на сайте, то есть меню, в котором сейчас находится посетитель, и при этом весь блок этого меню переместить в отдельный файл? Ведь в будущем сайт будет расти и нужно будет меню выносить во внешний файл, чтобы править в одном месте... Но КАК сделать при этом подсветку отдельного активного пункта меню на сайте?? Буду очень признателен за помощь в данном вопросе.

---------- Добавлено 10.10.2017 в 21:33 ----------

Добавлю свой вопрос.

Я планирую всё меню на сайте вынести в отдельный файл, используя РНР-инклуды.

Скажу сразу, сам язык РНР я пока знаю очень-очень поверхностно.

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

volkovysk
На сайте с 06.05.2011
Offline
74
#1

roman1981, зачем так акцентрировать внимание на РНР-инклуды? Они тут ни причём. Дизайн сайта задаётся стилями и разметкой HTML.

Arsh
На сайте с 21.03.2007
Offline
199
#2
roman1981:
Как обеспечить при этом, чтобы активный пункт меню на сайте подсвечивался, и сам блок меню был в отдельном файле, который я и буду потом подключать ("инклудидь") к сайту? Вот вопрос...

Для начала Вам надо понять - как Вы будете получать id документа (=страницы)?

Дальше просто - к каждой ссылке в меню пишите что-то типа:

if (id==page_id) echo "class='activ' ";

R1
На сайте с 20.04.2017
Offline
30
#3
Arsh:
Для начала Вам надо понять - как Вы будете получать id документа (=страницы)?
Дальше просто - к каждой ссылке в меню пишите что-то типа:
if (id==page_id) echo "class='activ' ";

Коллега, спасибо большое, вашу мысль я понял.

Итак, после того как я сделаю адаптивный дизайн, соответственно, я разбиваю шаблон сайта на блоки, для удобства управления сайтом в отдалённом будущем (1000+ страниц), а именно: блоки header.php, footer.php, menu.php, и так далее. Если шапка и подвал сайта не меняются на всех 1000 страницах, то меню должно подсвечивать активный пункт, в котором сейчас находится посетитель сайта. Для решения этой задачи мне необходимо как-то идентифицировать из тысячи страниц сайта ту страницу, которая должна подсвечивать активный пункт меню. И, соответственно, конструкцией IF / ELSE выводить (в зависимости от указанного условия) активное меню именно на данную страницу сайта.

Мы приходим к тому, что главное - найти корректный способ получения ID активного документа (= страницы сайта).

Тут у меня пришло в голову следующее решение.

В самом начале каждой страницы сайта разместить РНР-код, в котором задать переменную и присвоить ей некоторое значение, к примеру что-то вроде такого:

<?php

$activeMenu = TRUE;

$passiveMenu = FALSE;

?>

И затем, используя условие, присваивать в том или ином случае активному пункту меню класс "active".

Я правильно мыслю, или же есть более корректный способ решить эту задачу?

---------- Добавлено 11.10.2017 в 07:08 ----------

volkovysk:
roman1981, зачем так акцентрировать внимание на РНР-инклуды? Они тут ни причём. Дизайн сайта задаётся стилями и разметкой HTML.

Коллега, адаптивный дизайн сайта у меня уже готов. Это уже пройденный этап. Кстати говоря, у меня все стили корректно вынесены в отдельный внешний файл styles.css, в самом шаблоне стилей нет, об этом я заранее позаботился. Плюс, адаптивный дизайн я сделал с помощью точек остановки, их у меня три, под разные разрешения мониторов (соответственно, с помощью медиа-запросов в стилях, как и положено).

Сейчас я нахожусь на этапе решения уже прикладных, технических вопросов управления сайтом. Именно потому я акцентирую внимание на РНР-инклудах. Вот решаю задачу подсвечивания активного пункта меню, и чтобы при этом само меню сайта было вынесено в отдельный файл "menu.php" и управлялось в будущем из одного места, а не править его на всех 1000+ страницах сайта.

M
На сайте с 04.12.2013
Offline
223
#4

По подсветке примерно так, только ветвление нужно делать для каждого пункта. Блок else в принципе без надобности. Вот гляньте этот мой пост. Обычно такими идентификаторами снабжаются все страницы/корневые страницы всех разделов, т.е. нужно просто вычитывать данные запрошенной страницы, включая идентификатор, ну а если у вас сайт на файлах, что само по себе не очень, тогда, да, сначала определяете фактические данные для тек. страницы, а потом в шаблоне делаете проверки.

---------- Добавлено 11.10.2017 в 09:13 ----------

P.S. В принципе резать общий шаблон на шапку, подвал, меню и т.п. нет необходимости. Или вы осн. контент пихаете прямо в исполняемый файл между ними? :)

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
Arsh
На сайте с 21.03.2007
Offline
199
#5
roman1981:
адаптивный дизайн сайта у меня уже готов. Это уже пройденный этап.
roman1981:
Сейчас я нахожусь на этапе решения уже прикладных, технических вопросов управления сайтом.

Вообще-то, все наоборот. Это адаптивный дизайн - прикладная задача.

А вот, если Вы создадите over 1000 страниц на кривой архитектуре - это будет боль)

R1
На сайте с 20.04.2017
Offline
30
#6

SeVlad

Да, видимо, нужно было создать свой топик. Прошу прощения.

Просто начал читать эту ветку, в которой как раз рассматривали вопрос SSI (Server Side Includes), их применения, и так далее. Ну и задал вопрос, поскольку как раз в разрезе этих самых включений у меня и была проблема - не подсвечивалось меню на сайте. А так вы абсолютно правы, ещё раз прошу прощения, виноват.

miketomlin

Спасибо за ваш ответ и советы. Позвольте ещё раз для себя окончательно уточнить этот тонкий нюанс.

То есть, моё направление мыслей было правильным. Так как у меня страницы сайта разбиты на отдельные обычные файлы (что так и есть на самом деле), тогда я в самом начале каждой страницы создаю блок РНР-скрипта, и в нём прописываю (инициализирую) переменные для этой конкретной текущей страницы.

А уже потом в шаблоне (отдельном файле с меню, например "menu.php") я конструкцией IF / ELSE делаю проверки, и в зависимости от результата этих проверок (булев тип данных true / false) я добавляю в своё меню на сайте класс "active". Или же не добавляю. Где-то таким образом. Правильно я понимаю этот момент?

SeVlad
На сайте с 03.11.2008
Offline
1609
#7
roman1981:
Да, видимо, нужно было создать свой топик. Прошу прощения.

Ну раз осознал - я вынес. Продолжайте тут ;)

ЗЫ. код на форум вставляй в ббкодах [code][/code].

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
M
На сайте с 04.12.2013
Offline
223
#8

roman1981, правильно. Лучше сделать пример и показать, чем уточнять на словах.

plattoo
На сайте с 12.05.2010
Offline
195
#9

вот, кажись работает

переменную $site можно задать в каком-нить конфигурационном файле, чтобы она была доступна не только в menu.php


$site = 'http://'.$_SERVER['HTTP_HOST'];

$uri = $_SERVER['REQUEST_URI'];

$menu_links = array('/page_1' => 'Анкор_1', '/page_2' => 'Анкор_2', '/page_3' => 'Анкор_3');

foreach ($menu_links as $anchor){

$array = array_keys($menu_links, $anchor);

$link = array_shift($array);

if ($link == $uri) {

$other_links .= '<li class="active"><a href='.$site.$link.'">'.$anchor.'</a></li>'."\r\n";
} else {
$other_links .= '<li><a href="'.$site.$link.'">'.$anchor.'</a></li>'."\r\n";
}

}

echo $other_links;

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий