Jump to content
  • 0

Как реализовать активную кнопку


BlooDSikeR
 Share

Question

День добрый господа!
Какое-то время назад, делал для себя примитивный сайт-портфолио(чисто на html/css), недавно начал изучать php, и решил тренироваться на этои сайте.

Отделил хидер и футер, подключаю их,и все бы хорошо, но как на php реализовать в горизонтальном меню, активную кнопку, на которой сейчас находиться посетитель http://joxi.ru/ZrJylxKfydyZAj http://joxi.ru/V2VKZ07SOZOPAv, раньше все это делал ручками и на каждой статической странице прописывал class="current"http://joxi.ru/Dr8E5zYu38Xjm6.
Дайте пожалуйста совет, или направте куда-то, только не далеко) 

 

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Ну а в чём проблема? Берёте и так же ставите ей класс, если совпадает ссылка и урл текущей страницы.

Вы меня наверное не правильно поняли, или это я вас сейчас не понял)

В index.php я подключаю header.php http://joxi.ru/D2PQ5NnCEnajA3, а вот это http://joxi.ru/Dr8E5zYu38Xjm6 и есть сам header.php. Один хидер для всех страниц, класс должен сам подставляться по переходу на вкладку.

Ну как один из вариантов вот такое решение, он оно не делает кнопку активной.

 

<div class="head_top">  <div class="menu_top">    <div class="logo">      <a href="/"><img src="http://www.html-d.zz.mu/img/logo.png" alt="logo" title="logo"></a>    </div>  <ul>    <li><a <?php if($_SERVER['REQUEST_URI'] == 'index.php') echo ' class="current" '; ?> href="index.php">Главная</a></li>    <li><a <?php if($_SERVER['REQUEST_URI'] == 'about.php') echo ' class="current" '; ?> href="about.php">Обо мне</a></li>    <li><a <?php if($_SERVER['REQUEST_URI'] == 'portfolio.php') echo ' class="current" '; ?> href="portfolio.php">Портфолио</a></li>    <li><a <?php if($_SERVER['REQUEST_URI'] == 'service.php') echo ' class="current" '; ?> href="service.php">Услуги</a></li>    <li><a <?php if($_SERVER['REQUEST_URI'] == 'contact.php') echo ' class="current" '; ?> href="contact.php">Контакты</a></li>    <li><a <?php if($_SERVER['REQUEST_URI'] == 'blog.php') echo ' class="current" '; ?> href="blog.php">Блог</a></li>  </ul>  </div></div>
Link to comment
Share on other sites

  • 0

Ну, судя по всему, всё нормально. http://www.html-d.zz.mu/about.phpвот выделен же нужный пункт в меню? Или я что-то не так понял? А ваш один вариант решения — примерно то, что нужно, да. Только, кажется, надо начинать со слэша — типа

if($_SERVER['REQUEST_URI'] == '/about.php')
Link to comment
Share on other sites

  • 0

 

Ну, судя по всему, всё нормально. http://www.html-d.zz.mu/about.phpвот выделен же нужный пункт в меню? Или я что-то не так понял? А ваш один вариант решения — примерно то, что нужно, да. Только, кажется, надо начинать со слэша — типа

if($_SERVER['REQUEST_URI'] == '/about.php')

 

Спасибо)

Уже реализовал через массив

<div class="head_top">  <div class="menu_top">    <div class="logo">      <a href="/"><img src="http://www.html-d.zz.mu/img/logo.png" alt="logo" title="logo"></a>    </div>    <ul id="menu">     <?PHP        $menu=array("Главная"=>"index.php","Обо мне"=>"about.php","Портфолио"=>"portfolio.php","Услуги"=>"service.php","Контакты"=>"contact.php","Блог"=>"blog.php");        foreach($menu as $key=>$value)        {        echo "<li><a href='$value' ".((preg_match("/$value/",$_SERVER['PHP_SELF']))?" class='current' ":"").">$key</a></li>";        }     ?>    </ul>  </div></div>	<!--end head_top-->
Edited by BlooDSikeR
Link to comment
Share on other sites

  • 0

Вот и правильно. Через массив — грамотное решение. Осталось только preg_match заменить на простое сравнение и будет вообще хорошо.

А если url содержит в себе параметры запроса, например - index.php?page=articles&id=8&num=4, тогда без preg_match я думаю не обойтись, что бы, например, вытащить articles?

Link to comment
Share on other sites

  • 0
А если url содержит в себе параметры запроса, например - index.php?page=articles&id=8&num=4, тогда без preg_match я думаю не обойтись, что бы, например, вытащить articles?

Никто не мешает проверять PATH_INFO. 

Link to comment
Share on other sites

  • 0

 

А если url содержит в себе параметры запроса, например - index.php?page=articles&id=8&num=4, тогда без preg_match я думаю не обойтись, что бы, например, вытащить articles?

Никто не мешает проверять PATH_INFO. 

 

$_SERVER['PATH_INFO'] возвращает путь после имени скрипта, но до строки запроса?

Link to comment
Share on other sites

  • 0

 

 

'PATH_INFO' Contains any client-provided pathname information trailing the actual script filename but preceding the query string, if available. For instance, if the current script was accessed via the URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, then$_SERVER['PATH_INFO'] would contain /some/stuff.

Посути это не совсем то, что нужно, и вообще я сто лет уже не видел, чтобы адреса были типа «about.php». В реальности будет, наверное, что-то типа такого $_SERVER['PATH_NAME'] ?: $_SERVER['PHP_SELF'] или же просто $_SERVER['PHP_SELF']. Я уже, если честно, плохо помню такие детали — обычно я не проверяю адресную строку никогда и ни на что — это делает урлорулилка.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy