|
|
|
|
|
для: 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() подставлять недостающее. | |
|
|
|
|
|
|
|
для: confirm
(11.03.2013 в 11:23)
| | Если вас не затруднит, можете привести пример реализации подобного. Спасибо. | |
|
|
|
|
|
|
|
для: 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-комментария помещенная первой в эти файлы, текст из которой поместить в линк будет просто. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: confirm
(11.03.2013 в 10:22)
| | Спасибо за помощь. Пока решил задачу так, задал стиль каждого пункта меню отдельной переменной. | |
|
|
|
|
|
|
|
для: home-studia
(11.03.2013 в 10:10)
| | Да, именно так - на сервере можно всегда получить всю подноготную об url, включая имя файла на который ссылаются. То есть узнать, что в данный момент запрашивается kategoria.html труда не составляет.
Не составит труда найти в подключаемом файле в строках меню (а сделать их лучше в таком случае некой переменной) эту же строку - kategoria.html. Для этого подключаемый файл-меню должен иметь сценарий, который получив имя запрашиваемого файла ищет его в переменной описывающей это меню.
Ну а дальше, это уж как вам хочется - можно удалить из этого меню у найденной ссылки линк, а сделать это не сложно, зная номер найденной позиции в строке, минус позиция на слово href= и кавычку (если они есть) а от этой позиции удалить все это, плюс длину слова kategoria.html, плюс кавычка. А тегу без линка свой стиль.
Еще проще все будет сделать, если меню описано не просто как переменная, а как массив, в этом случае удалить из массива линк, или заменить его активным тегом будут еще проще.
А на клиенте, это же самое можно сделать с помощью JS, там правда нужно будет найти в объекте содержащем ссылки меню линк равный location и этой ссылке указать стиль свой. | |
|
|
|
|
|
|
|
для: confirm
(11.03.2013 в 09:55)
| | Меню не динамическое, как писал выше это уже готовая страница, которая подгружается на остальные страницы по средствам "include".
>Второй способ, это пройтись по уже готовому меню и найти в нем лик равный url запроса, и отметить.
Правильно ли я понял, что если у меня в меню есть ссылка на страницу kategoria.html, то при переходе на эту страницу можно определить (что мы на странице kategoria.html) и подсветить необходимый пункт меню? Если да, то как и в какой стороне искать информацию?
>А если у вас будет 20000 страниц, то они все в меню будут?
меню ссылается на категории их не много. | |
|
|
|
|
|
|
|
для: 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:37)
| | Дело в том, что меню эта обычная страница с линками на необходимые страницы, которая подгружается на страницу, через команду "include" в необходимое место. Задался вопросом, можно ли как то сделать, что при нажатии по такой ссылке на новой странице необходимый пункт меню выделится. Есть предположение, что это можно сделать через cookies. | |
|
|
|
|