-1

I am trying to make a active page link with my following codes. But as I add more pages in the future, this if else will be much more. Is there a way to make it shorter if else ?

<?php  
$urlarray=explode('/', $_SERVER["REQUEST_URI"]);
$pageActive = end($urlarray); 
$dashClass ='';  
$userClass = '';
$settingClass = '';
$activePage = array(
    "dashboard",
    "settings",
    "users"
);

if(in_array($pageActive, $activePage)) { 
    if($pageActive == 'users'){
        $userClass = 'class="active"';
    }else if($pageActive == 'dashboard'){
        $dashClass = 'class="active"';
    }else if($pageActive == 'settings'){
        $settingClass = 'class="active"';
    }
    ...
    ...
    ...
} 
?>

The echo html here

<ul>
  <li <?php echo $dashClass;?>></li>
  <li <?php echo $userClass;?>></li>
  <li <?php echo $settingClass;?>></li> 
</ul> 
AlwaysStudent
  • 1,354
  • 18
  • 49

2 Answers2

2

Use a switch

switch($pageActive) {
    // Users
    case 'users':
        $userClass = 'class="active"'
        break;

    // Dash
    case 'dashboard':
        $dashClass = 'class="active"'
        break;

    //something else
    case 'something-else':
        $somethingElseClass = 'class="blah"'
        break;

    // Default fallback one
    default:
        $userClass = 'class="active"';
        break;
}

EDIT You could just do

<li <?php if($pageActive === 'user'){ echo 'class="active"'; } ?>User</li>
<li <?php if($pageActive === 'dashboard'){ echo 'class="active"'; } ?>>Dashboard</li>
ggdx
  • 3,024
  • 4
  • 32
  • 48
0

Their is already an array with list of menu items, having name as "activePage". You can try below code.

<?php
$urlarray=explode('/', $_SERVER["REQUEST_URI"]);
$pageActive = end($urlarray); 
$activePage = array('dashboard', 'settings', 'users');
?>

<ul>
    <?php
        foreach($activePage as $_key => $_value) {
            $menuSelect = '';
            if( in_array($pageActive, $activePage) ) {
                $menuSelect = 'class="active"';
            }
            ?><li <?php echo $menuSelect; ?>><?php echo $_value; ?></li><?php
        }
    ?>
</ul>
Prasad Wargad
  • 737
  • 2
  • 7
  • 11
  • Do or do not, there is no "try". A ***good answer*** will always have an explanation of what was done and why it was done in such a manner, not only for the OP but for future visitors to SO. – Jay Blanchard Sep 05 '18 at 12:06
  • TRUE, I guess my answer too solving the issue, without need to put much if else. – Prasad Wargad Sep 05 '18 at 12:09