|
|
|
| Здравствуйте.
Есть сайт (обычные страницы на html), на страницы через “Include” подгружается меню. Можно ли сделать, чтобы находятся на определенной странице, необходимый пункт меню подсвечивался (выделялся)? Буду очень признателен, если подскажите, как можно подобное реализовать при текущих условиях.
Спасибо. | |
|
|
|
|
|
|
|
для: home-studia
(11.03.2013 в 09:35)
| | Как вы готовите свое меню и по каким параметрам идет вызов страниц? | |
|
|
|
|
|
|
|
для: confirm
(11.03.2013 в 09:37)
| | Дело в том, что меню эта обычная страница с линками на необходимые страницы, которая подгружается на страницу, через команду "include" в необходимое место. Задался вопросом, можно ли как то сделать, что при нажатии по такой ссылке на новой странице необходимый пункт меню выделится. Есть предположение, что это можно сделать через cookies. | |
|
|
|
|
|
|
|
для: home-studia
(11.03.2013 в 09:48)
| | А при чем тут cookies?
К примеру, у вас есть 5 страниц с именем 1.htm - 5.htm. Если это и все, то это и есть весь запрос, и в меню ссылки имеют тоже самое. Если меню готовится динамически, то во время его подготовки нужно сравнивать параметр url, который вы помещаете в линки с пришедшим параметром, и отметить этот пункт.
Второй способ, это пройтись по уже готовому меню и найти в нем лик равный url запроса, и отметить.
И третий, это стили - http://htmlbook.ru/css/active
А если у вас будет 20000 страниц, то они все в меню будут? | |
|
|
|
|
|
|
|
для: confirm
(11.03.2013 в 09:55)
| | Меню не динамическое, как писал выше это уже готовая страница, которая подгружается на остальные страницы по средствам "include".
>Второй способ, это пройтись по уже готовому меню и найти в нем лик равный url запроса, и отметить.
Правильно ли я понял, что если у меня в меню есть ссылка на страницу kategoria.html, то при переходе на эту страницу можно определить (что мы на странице kategoria.html) и подсветить необходимый пункт меню? Если да, то как и в какой стороне искать информацию?
>А если у вас будет 20000 страниц, то они все в меню будут?
меню ссылается на категории их не много. | |
|
|
|
|
|
|
|
для: home-studia
(11.03.2013 в 10:10)
| | Да, именно так - на сервере можно всегда получить всю подноготную об url, включая имя файла на который ссылаются. То есть узнать, что в данный момент запрашивается kategoria.html труда не составляет.
Не составит труда найти в подключаемом файле в строках меню (а сделать их лучше в таком случае некой переменной) эту же строку - kategoria.html. Для этого подключаемый файл-меню должен иметь сценарий, который получив имя запрашиваемого файла ищет его в переменной описывающей это меню.
Ну а дальше, это уж как вам хочется - можно удалить из этого меню у найденной ссылки линк, а сделать это не сложно, зная номер найденной позиции в строке, минус позиция на слово href= и кавычку (если они есть) а от этой позиции удалить все это, плюс длину слова kategoria.html, плюс кавычка. А тегу без линка свой стиль.
Еще проще все будет сделать, если меню описано не просто как переменная, а как массив, в этом случае удалить из массива линк, или заменить его активным тегом будут еще проще.
А на клиенте, это же самое можно сделать с помощью JS, там правда нужно будет найти в объекте содержащем ссылки меню линк равный location и этой ссылке указать стиль свой. | |
|
|
|
|
|
|
|
для: confirm
(11.03.2013 в 10:22)
| | Спасибо за помощь. Пока решил задачу так, задал стиль каждого пункта меню отдельной переменной. | |
|
|
|
|
|
|
|
для: home-studia
(11.03.2013 в 11:13)
| | если правильно понял, можно еще вот так:
index
<?
$nav_active = "index";
|
kategoria
<?
$nav_active = "kategoria";
|
и потом в файле с меню что-то типа
<?
<a class="<?=(isset($nav_active) && $nav_active == "index")?"active":"">" href="index.html">Home</a>
<a class="<?=(isset($nav_active) && $nav_active == "kategoria")?"active":"">" href="kategoria.html">kategoria</a>
|
etc | |
|
|
|
|
|
|
|
для: psychomc
(11.03.2013 в 11:21)
| | Я сделал так:
header.php
<div id="menu">
<ul>
<li class="<?=$kat1;?>"> <a href="kat1.php"> Категория 1 </a> </li>
<li class="<?=$kat2;?>"> <a href="kat2.php"> Категория 2 </a> </li>
</ul>
</div>
|
kat1.php
<?php
$kat1 = "active";
include_once("header.php");
?>
|
| |
|
|
|
|
|
|
|
для: home-studia
(11.03.2013 в 11:13)
| | Слишком жирно для каждого, если все одинаково.
Вы вообще можете автоматизировать весь процесс, даже с вашими статическими файлами.
Достаточно поместить файлы описывающие пункты меню в отдельную папку, или держать их в общей папке, но к имени этих файлов добавлять один и тот же префикс, а имена файлов одинаковы и различаются только номером в конце (для указания порядка их в меню), то функцией glob() по префиксу как по маске легко получить эти файлы как массив.
Этим и должен заниматься файл-меню подключаемый. Далее в цикле, обходя этот массив файлов строится меню, в итерациях которого очень легко сравнить имя файла запрошенного и текущего из массива, и если равны, значит это выбранный пользователем пункт меню. Отмечайте его как душе угодно.
В этом случае добавление нового файла (ссылки в меню) описывающего новый раздел будет происходить автоматически. Значениями (текстом) для ссылок меню может служить строка html-комментария помещенная первой в эти файлы, текст из которой поместить в линк будет просто. | |
|
|
|
|
|
|
|
для: confirm
(11.03.2013 в 11:23)
| | Если вас не затруднит, можете привести пример реализации подобного. Спасибо. | |
|
|
|
|
|
|
|
для: home-studia
(11.03.2013 в 11:50)
| | Да я вам ее полностью расписал и так, по пунктам.
Для этого потребуется функция glob(), а также, можно держать текст описания для линков в мета-теге DESCRIPTION и получать его функцией get_meta_tags(), если эти файлы первичные и описывают страницу (то есть от тега html....).
Именуйте файлы описывающие меню, например, как category-01.html - category-15.html. Функция glob() при обращении к файлам по маске category* вернет их как массив.
В цикле строите меню с условиями о которых я говорил выше - проверяете каждое имя файла массива (в итерации) с именем запрошенного, которое можно получить несколькими способами, например, $_SERVER['SCRIPT_NAME']. Если равно - значит это активный пункт меню.
Все, что конкретно непонятного из этого?
PS. Функция glob() в зависимости от вызова ее относительно запрашиваемого каталога файлов может возвращать не имя файла, а путь/имя, в этом случае необходимо поучать имя функцией basename().
Можно сравнивать и не имена, а url, если к возвращенному значению функцией glob() подставлять недостающее. | |
|
|
|