user1591117
user1591117

Reputation: 297

Checking if a button was clicked and what was clicked

I'm new to PHP and HTML, I was creating my first website and I found that I would have to repeat a header over and over so I put it in a 'Header.php' file and included it now I have the problem of checking what page they goto. I need to know what page they goto so I can place a 'class="active"' on the page they goto. I may need the code written for me if it isn't too long. Even an example of how you do it showing all the elements will help. Anyhow heres my code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>Metamorphosis Design Free Css Templates</title>
        <meta name="keywords" content="" />
        <meta name="description" content="" />
        <input type="hidden" id="link_is_clicked" name="link_is_clicked" value="0"/> 
        <link href="styles.css" rel="stylesheet" type="text/css" media="screen" />
        <link rel="stylesheet" href="nivo-slider.css" type="text/css" media="screen" />
    </head>
    <body>
        <div id="bg_top">
            <div id="wrap_bg">
                <div id="wrap">
                    <div id="header">
                        <div id="menu">
                            <ul>
                                <li class="but1_menu"><a href="index.php"class="active">Home</a></li>
                                <li class="but2_menu"><a href="blog.php">Blog</a></li>
                                <li class="but3_menu"><a href="gallery.php">Gallery</a></li>
                                <li class="but4_menu"><a href="about.php">About Us</a></li>
                                <li class="but5_menu"><a href="contact.php">Contact Us</a></li>
                            </ul>
                        </div>
                        <div id="logo">
                            <h1><a href="#">metamorph_strongrey</a></h1>
                            <a href="#"><small>Small Company Slogan Goes Here</small></a>
                        </div>

Thanks for you help.

Upvotes: 1

Views: 333

Answers (5)

stefanz
stefanz

Reputation: 1326

One more method.

Your page will look like

<?php 
   $curr = "gallery";
   include('header.php');
?>

where the $curr variable has a value which could be found in the menu below

and now the menu

                        <li class="but1_menu"><a <?php echo ($curr == "index" ? "class='active'" : "" ); ?> href="index.php">Home</a></li>
                        <li class="but2_menu"><a <?php echo ($curr == "blog" ? "class='active'" : "" ); ?> href="blog.php">Blog</a></li>
                        <li class="but3_menu"><a <?php echo ($curr == "gallery" ? "class='active'" : "" ); ?> href="gallery.php">Gallery</a></li>
                        <li class="but4_menu"><a <?php echo ($curr == "about_us" ? "class='active'" : "" ); ?> href="about.php">About Us</a></li>
                        <li class="but5_menu"><a <?php echo ($curr == "contact_us" ? "class='active'" : "" ); ?> href="contact.php">Contact Us</a></li>

To keep code clean is better to use short if/else statement because there is no complex stuff.

Also i recommend to you to put "active" class on <li> but this depends by the style of each developer. In some complex menus it will help you very much.

Upvotes: 0

asprin
asprin

Reputation: 9823

First step: Get the current page the user is visiting

$current_url = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);

Second step: Create an array containing all menu link pages

$all_urls = array('index.php', 'blog.php', 'gallery.php', 'about.php', 'contact.php');

Third step: Check if the current url is inside the array. If yes, apply the class

<ul>        
    <li class="but1_menu"><a href="index.php" <?php if(in_array($current_url, $all_urls)){echo 'class="active"'; } ?>>Home</a></li>
    <li class="but2_menu"><a href="blog.php" <?php if(in_array($current_url, $all_urls)){echo 'class="active"'; } ?>>Blog</a></li>
    <li class="but3_menu"><a href="gallery.php" <?php if(in_array($current_url, $all_urls)){echo 'class="active"'; } ?>>Gallery</a></li>
    <li class="but4_menu"><a href="about.php" <?php if(in_array($current_url, $all_urls)){echo 'class="active"'; } ?>>About Us</a></li>
    <li class="but5_menu"><a href="contact.php" <?php if(in_array($current_url, $all_urls)){echo 'class="active"'; } ?>>Contact Us</a></li>    
</ul>

Upvotes: 2

Lix
Lix

Reputation: 47956

All you have to do is place in the href parameter of your anchor tags <a>, a query string indicating what link was pressed.

<a href="about.php?action=about">About Us</a>  

Now in your PHP code, you'll want to take a look at the $_GET variable. It is an associative array of all the parameters passed in the URL. So $_GET['action'] will be equal to about.

When you come to write your header once again and want to indicate a "active" link by adding a class, you can just test the action element of the $_GET variable.

Lets assume that in your header file you have an array of links like this -

$headerLinks = array(
  'about' => array(
     'href'=>'about.php?action=about',
     'title'=>'About Us' 
  ),
  'home' => array(
     'href'=>'home.php?action=home',
     'title'=>'Home' 
  ),
  'blag' => array(
     'href'=>'blag.php?action=blag',
     'title'=>'Our Blag' 
  ),
  ...
);

You would loop over the contents of that array to create your links with the appropriate on having the active class.

foreach($headerLinks AS $key => $link){
  $isActive = $_GET['action'] == $key? 'active' : '';
  echo '<a href="'.$link['href'].'" class="'.$isActive.'">'.$link['title'].'</a>';
}

Upvotes: 1

williamium
williamium

Reputation: 76

You should check out this page:

http://php.net/manual/en/reserved.variables.server.php

Specifically the part about REQUEST_URI and that will be what you need. Simply check for this in an if or case statement and apply your class as needed.

You'll only need a few lines of code to check for the uris in your nav bar.

Upvotes: 0

newfurniturey
newfurniturey

Reputation: 38416

When it's a small list like you have, I normally would go with a simple if statement:

<li class="but1_menu"><a href="index.php"<?=(($_SERVER['SCRIPT_NAME']=='index.php')?' class="active"':'');?>>Home</a></li>
<li class="but2_menu"><a href="blog.php"<?=(($_SERVER['SCRIPT_NAME']=='blog.php')?' class="active"':'');?>>Blog</a></li>
<li class="but3_menu"><a href="gallery.php"<?=(($_SERVER['SCRIPT_NAME']=='gallery.php')?' class="active"':'');?>>Gallery</a></li>
<li class="but4_menu"><a href="about.php"<?=(($_SERVER['SCRIPT_NAME']=='about.php')?' class="active"':'');?>>About Us</a></li>
<li class="but5_menu"><a href="contact.php"<?=(($_SERVER['SCRIPT_NAME']=='contact.php')?' class="active"':'');?>>Contact Us</a></li>

This will check the current script's name via $_SERVER['SCRIPT_NAME'] and if it matches, it will echo class="active".

Upvotes: 3

Related Questions