Upsilon42
Upsilon42

Reputation: 241

How to design the navigation in a php tool/website?

I'm designing a semi-basic tool in PHP, I have more experience server side, and not in PHP.

My tool contains 10-15 pages, and I am doing the navigation between them with the $_GET parameter.

In my code I have many if statements that look like:

if(isset[param1] && !isset[param2] && .....&& !isset[paramN]){
    // code
}

You will agree with me, it's ugly, right?

Is it "how we do it" in PHP? or is there some kind of design pattern / functions for navigation in a PHP website?

Edit: To be clearer, what I want to know is: Is the proper way to design the navigation is with plenty of $_GET variables?

Upvotes: 2

Views: 170

Answers (4)

Speckle
Speckle

Reputation: 103

(I'm not using switch but you should definitely try that, and try using break between cases)

I'm using this at the moment, it seems to avoid mass-IFfing:

if (!$_GET) {
    homePageFunction();
}elseif($_GET) {
    contentPagesFunction($_GET['p']);
}

I have a menuer() function that outputs rel paths to content 'things' in links like:

<a href='?p=$relPath'>$name</a>

Although I could probably use different notation to tidy it further... Untested but like this:

if     (!$_GET) homePageFunction();
elseif  ($_GET) contentPagesFunction($_GET['p']);

Upvotes: 0

Yang
Yang

Reputation: 8701

Actually the solution to this problem is a little bit complicated, than it might seem at first glance. And you need to implement a handler for that, since you're looking a cleanest way of handling GET parameters and invoking a code fragment.

In your case, your final API, should look like this (since you were asking for the design, not the for implementation):

$nav = new Nav($_GET);
$nav->whenSet('param1', 'param2')->andNotSet('param3')->then(function(){

});

$nav->whenSet('param3')->andNotSet('param1', 'param2')->then(function(){

});

// Or a simpler and shorter way
$nav->register($existingKeys, $nonExistingKeys, function(){

});

Another option you have is to use a routing mechanism. Most PHP frameworks provide this functionality. They all support optional route fragments, so you can handle parameters only defining one route path, like this /page/? (? - means optional).

Upvotes: 1

devpro
devpro

Reputation: 16117

This is my suggestion add conditions in an array and than use in_array()

echo in_array($yourVar, array('abc', 'def', 'hij', 'klm', 'nop'))
      ? True 
      : false;

UPDATE:

$get = "abc";
$navigation = array(
"abc"=>"yourneed",
"def"=>"yourneed2",
"ghi"=>"yourneed3",
);

foreach($navigation as $key => $value){
if($key == $get){
echo $value;
}
}

One more solution you can define routes also. Same as CI and YII.

Upvotes: 0

frankle
frankle

Reputation: 141

To avoid a huge if else statement try a switch statement:

$param1 = 'something';

switch (true){

    case isset($param1):
    echo "PARAM 1 is set";
    break;

    case isset($param2):
    echo "PARAM 2 is set";
    break;

    default:
    echo "None set";

}

And to answer your edit - Yes, you can use _GET variables for navigation and it is normal.

Upvotes: 2

Related Questions