Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: html + include меню = выделить пункты меню
 
 автор: home-studia   (11.03.2013 в 09:35)   письмо автору
 
 

Здравствуйте.

Есть сайт (обычные страницы на html), на страницы через “Include” подгружается меню. Можно ли сделать, чтобы находятся на определенной странице, необходимый пункт меню подсвечивался (выделялся)? Буду очень признателен, если подскажите, как можно подобное реализовать при текущих условиях.

Спасибо.

  Ответить  
 
 автор: confirm   (11.03.2013 в 09:37)   письмо автору
 
   для: home-studia   (11.03.2013 в 09:35)
 

Как вы готовите свое меню и по каким параметрам идет вызов страниц?

  Ответить  
 
 автор: home-studia   (11.03.2013 в 09:48)   письмо автору
 
   для: confirm   (11.03.2013 в 09:37)
 

Дело в том, что меню эта обычная страница с линками на необходимые страницы, которая подгружается на страницу, через команду "include" в необходимое место. Задался вопросом, можно ли как то сделать, что при нажатии по такой ссылке на новой странице необходимый пункт меню выделится. Есть предположение, что это можно сделать через cookies.

  Ответить  
 
 автор: confirm   (11.03.2013 в 09:55)   письмо автору
 
   для: home-studia   (11.03.2013 в 09:48)
 

А при чем тут cookies?
К примеру, у вас есть 5 страниц с именем 1.htm - 5.htm. Если это и все, то это и есть весь запрос, и в меню ссылки имеют тоже самое. Если меню готовится динамически, то во время его подготовки нужно сравнивать параметр url, который вы помещаете в линки с пришедшим параметром, и отметить этот пункт.
Второй способ, это пройтись по уже готовому меню и найти в нем лик равный url запроса, и отметить.
И третий, это стили - http://htmlbook.ru/css/active

А если у вас будет 20000 страниц, то они все в меню будут?

  Ответить  
 
 автор: home-studia   (11.03.2013 в 10:10)   письмо автору
 
   для: confirm   (11.03.2013 в 09:55)
 

Меню не динамическое, как писал выше это уже готовая страница, которая подгружается на остальные страницы по средствам "include".

>Второй способ, это пройтись по уже готовому меню и найти в нем лик равный url запроса, и отметить.
Правильно ли я понял, что если у меня в меню есть ссылка на страницу kategoria.html, то при переходе на эту страницу можно определить (что мы на странице kategoria.html) и подсветить необходимый пункт меню? Если да, то как и в какой стороне искать информацию?

>А если у вас будет 20000 страниц, то они все в меню будут?
меню ссылается на категории их не много.

  Ответить  
 
 автор: confirm   (11.03.2013 в 10:22)   письмо автору
 
   для: home-studia   (11.03.2013 в 10:10)
 

Да, именно так - на сервере можно всегда получить всю подноготную об url, включая имя файла на который ссылаются. То есть узнать, что в данный момент запрашивается kategoria.html труда не составляет.
Не составит труда найти в подключаемом файле в строках меню (а сделать их лучше в таком случае некой переменной) эту же строку - kategoria.html. Для этого подключаемый файл-меню должен иметь сценарий, который получив имя запрашиваемого файла ищет его в переменной описывающей это меню.
Ну а дальше, это уж как вам хочется - можно удалить из этого меню у найденной ссылки линк, а сделать это не сложно, зная номер найденной позиции в строке, минус позиция на слово href= и кавычку (если они есть) а от этой позиции удалить все это, плюс длину слова kategoria.html, плюс кавычка. А тегу без линка свой стиль.
Еще проще все будет сделать, если меню описано не просто как переменная, а как массив, в этом случае удалить из массива линк, или заменить его активным тегом будут еще проще.

А на клиенте, это же самое можно сделать с помощью JS, там правда нужно будет найти в объекте содержащем ссылки меню линк равный location и этой ссылке указать стиль свой.

  Ответить  
 
 автор: home-studia   (11.03.2013 в 11:13)   письмо автору
 
   для: confirm   (11.03.2013 в 10:22)
 

Спасибо за помощь. Пока решил задачу так, задал стиль каждого пункта меню отдельной переменной.

  Ответить  
 
 автор: psychomc   (11.03.2013 в 11:21)   письмо автору
 
   для: home-studia   (11.03.2013 в 11:13)
 

если правильно понял, можно еще вот так:
index
<?
$nav_active 
"index";


kategoria
<?
$nav_active 
"kategoria";


и потом в файле с меню что-то типа

<?
<class="<?=(isset($nav_active) && $nav_active == "index")?"active":"">" href="index.html">Home</a>
<
class="<?=(isset($nav_active) && $nav_active == "kategoria")?"active":"">" href="kategoria.html">kategoria</a>


etc

  Ответить  
 
 автор: home-studia   (11.03.2013 в 11:47)   письмо автору
 
   для: 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");
?>

  Ответить  
 
 автор: confirm   (11.03.2013 в 11:23)   письмо автору
 
   для: home-studia   (11.03.2013 в 11:13)
 

Слишком жирно для каждого, если все одинаково.

Вы вообще можете автоматизировать весь процесс, даже с вашими статическими файлами.

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

Этим и должен заниматься файл-меню подключаемый. Далее в цикле, обходя этот массив файлов строится меню, в итерациях которого очень легко сравнить имя файла запрошенного и текущего из массива, и если равны, значит это выбранный пользователем пункт меню. Отмечайте его как душе угодно.

В этом случае добавление нового файла (ссылки в меню) описывающего новый раздел будет происходить автоматически. Значениями (текстом) для ссылок меню может служить строка html-комментария помещенная первой в эти файлы, текст из которой поместить в линк будет просто.

  Ответить  
 
 автор: home-studia   (11.03.2013 в 11:50)   письмо автору
 
   для: confirm   (11.03.2013 в 11:23)
 

Если вас не затруднит, можете привести пример реализации подобного. Спасибо.

  Ответить  
 
 автор: confirm   (11.03.2013 в 12:05)   письмо автору
 
   для: 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() подставлять недостающее.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования