За последние 24 часа нас посетили 212363 программиста и 2236 роботов. Сейчас ищут 1256 программистов ...

Выделение пункта меню

Тема в разделе "PHP для новичков", создана пользователем dembi, 13 ноя 2008.

  1. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Привет всем!

    У меня есть меню, которое реализовано следующим образом:

    <a href="index.php"> Главная </a>
    <a href="find.php"> Поиск </a>
    <a href="add.php"> Добавить </a>

    И т.д.

    Вопрос, как сделать так чтобы, когда щёлкаешь мышкой допустим по пункту меню Главная он выделялся каким-то цветом?

    Подскажите хотя бы, в каком направление двигаться?

    Заранее спасибо всем.
     
  2. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Пара самых тупых убогих вариантов:
    1) Либо цепляться к имени вызываемого скрипта
    2) Либо вводить доп. переменную подсветки

    а дальше:
    Код (Text):
    1.  
    2. if(!ЕСЛИ) { echo "<a href=....">LINKNAME</a>; }
    3. else { echo "<b>LINKNAME</b>";
    ЕСЛИ - в зависимости от выбранного варианта
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ты имеешь в виду, когда загрузится, например, главная страничка, чтобы <a href="index.php"> Главная </a> было на ней другим цветом? Или ты имеешь в виду чтобы цвет ссылки менялся в тот момент, как по ней щёлкнули, а когда загрузилась новая страничка - все ссылки на ней опять одинаковые?
     
  4. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Определить, какой файл запросили.
    PHP:
    1. <a href="" <?=($file == 'index.php') ? 'class="current"' : ''?>>Главная</a>
    2. <a href="" <?=($file == 'find.php') ? 'class="current"' : ''?>>Поиск</a>
    3. <a href="" <?=($file == 'add.php') ? 'class="current"' : ''?>>Добавить</a>
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    JavaScript Rulez

    [js]<div id="menuDiv">
    <li ><a class="small" href="index.php">1</a></li>
    <li ><a class="small" href="index2.php"> 2</a></li>
    <li ><a class="small" href="index3.php">3</a></li>
    </div>

    <script type="text/javascript">
    try {
    var nl=document.getElementById('menuDiv').getElementsByTagName('a');
    var found=-1;
    var url=document.location.href+'/';
    var len=0;
    for (var i=0;i<nl.length;i++){
    if (url.indexOf(nl.href)>=0){
    if (found==-1 || len<nl.href.length){
    found=i;
    len=nl.href.length;
    }
    }
    }
    if (found>=0){
    nl[found].className='bold';
    }
    } catch(e){
    }
    </script>
    </div>
    [/js]
     
  6. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Mr.M.I.T.

    У меня вопрос.
    Хорошо я выделяю пункты меня с помощью <div> присваиваю ему id ="menuDiv".

    Я так понимаю если я перейду на index.php или index2.php он мне вернет значение menuDiv либо 0 либо 1.
    Я правильно понимаю?
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну дык подразумевается что в этих файлах тоже есть меню
     
  8. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    А можно ли это сделать с помощью CSS ?
     
  9. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    CSS это стили вроде
     
  10. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Поможет только установить заранее заготовленный стиль шрифта и т.п. и изменять его при наведении мыши на ссылку
     
  11. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Тогда вопрос:

    Каким образом передавать эти значения 0, 1, 2 и т.д. с помощью GET?

    Если да, то как правильно это делать?
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    в скрипте как раз и меняется стиль(класс) со small на bold
    ээ совсем ничего не понимаю
    какие значения? зачем их передовать?
    этот скрипт ищет href в url из сылок в menuDivи,если есть совпадения то меняет CSS класс ссылки на bold
     
  13. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    PHP:
    1.  
    2. <?php //menu.php
    3.  
    4. function drawMenu($page){
    5. //$page - имя текущего скрипта
    6.  
    7. $items = array(
    8. array('title'=>"Главная", 'url'=>"index.php"),
    9. array('title'=>"Найти", 'url'=>"find.php"),
    10. array('title'=>"Добавить", 'url'=>"add.php")
    11. );
    12.  $result = '';
    13.  foreach ($items as $item) {
    14.  if ($item['url'] == $page) {
    15. $resul .= "<font color='#FF0000'>".$item['title']."</font><br>";
    16. }
    17. else {
    18.  $resul .= "<a href='".$item['url']."'>".$item['title']."</a><br>";
    19. }
    20. }
    21. return $result;
    22. }
    23.  
    24. ?>
    25.  
     
  14. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    PHP:
    1.  
    2. <?php
    3.  
    4. include('menu.php');
    5. echo drawMenu($_SERVER['PHP_SELF']);
    6.  
    7. ?>
    8.  
     
  15. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Задача следующая:
    У меня есть БД с номерами.
    Мне нужно выводить все информацию по ним на титульную страницу index.php
    Должна быть возможность добавлять новые номера - это реализовывается на странице add.php, должена быть возможность поиска в БД - это реализовывается на стринеце find.php и т.д.

    На каждой странице я сделал меню:
    <div id="menuDiv">
    <td colspan="2"><a href="index.php"> Главная </a> </td>
    <td><a href="add.php" > Добавить </a> </td>
    <td><a href="find.php"> Найти </a> </td>
    и т.д.
    </div>

    Так вот, я хочу, чтобы когда я нажал по ссылке например "add.php", у меню название "Добавить" выделялось бы каким-то цветом.
    И так для каждого пункта меню
    Вот такая задача.
     
  16. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Как я понимаю функции drawMenu($page) должено передаваться url, напрмер find.php или add.php.

    А каким образом передавать этот url, с помощью GET, если да, то как правильно это делать?

    Заранее спасибо за ответ.
     
  17. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    dembi
    ну и ничего передобавить не надо, класс ссылки в menuDiv где href найден в адресной строке, будет меняться на bold
    а уж этому классу вы можете задать любые стили...

    2.
     
  18. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Использую вот такой простой код:

    <?php //menu.php

    function drawMenu($page){
    //$page - имя текущего скрипта

    $items = array(
    array('title'=>"Главная", 'url'=>"1.php"),
    array('title'=>"Найти", 'url'=>"3.php"),
    array('title'=>"Добавить", 'url'=>"2.php")
    );
    $result = '';
    foreach ($items as $item) {
    if ($item['url'] == $page) {
    $resul .= "<font color='#000000'>".$item['title']."</font><br>";
    }
    else {
    $resul .= "<a href='".$item['url']."'>".$item['title']."</a><br>";
    }
    }
    return $result;
    }

    echo drawMenu($_SERVER['PHP_SELF']);
    ?>

    <html>
    <head>
    <title> Главная </title>
    </head>
    <body>
    <table>
    <tr>
    <div id="menuDiv">
    <td colspan="2" ><a href="1.php"> Главная </a> </td>
    <td ><a href="2.php" > Добавить </a> </td>
    <td ><a href="3.php"> Найти </a> </td>
    </div>
    </tr>
    </table>
    </body>
    </html>


    Но к сожалению цвет Ссылки не меняется после нажатия на нее.

    Да и кстати, как мне вывести значение menuDiv, то есть как можно узнать какая ссылка сейчас выбрана?

    Если использовать echo $_SERVER['PHP_SELF']; Я получаю следующий результат:

    /1.php

    Подскажи, пожалуйста, где я ошибаюсь?
     
  19. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Удали лишний символ функцией substr. А где у тебя в коде цвет меняется? И там если я правильно понял два меню должно получиться=)
     
  20. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Вобщем здесь смысл такой, у тебя есть три скрипта, в каждом из которых нужно нарисовать меню и выделять пункт в зависимсти от того какая станица открыта. Для этого можно в каждом скрипте инклудить скрипт с функцией drawMenu, которая рисует собственно это меню и выделяет в нём пункт в зависимости от переданого параметра $page - урл скрипта в котором используется функция (можно хоть вручную написать его). Оформление меню, стили и прочее задается в самой функции.
     
  21. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    как я понимаю весь результат у меня хранится в переменой $resul.

    Как теперь этот результат правильно извлечь и использовать в этом коде:

    <tr>
    <div id="menuDiv">
    <td colspan="2" ><a href="1.php"> Главная </a> </td>
    <td ><a href="2.php" > Добавить </a> </td>
    <td ><a href="3.php"> Найти </a> </td>
    </div>
    </tr>

    ???
     
  22. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Спасибо большое, я мысль уловил )))
     
  23. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Еще раз большое спасибо всем.
    Все получилось используя скрипт предложенный free-bits.

    Всем приятного вечера :)