squidgeny
squidgeny

Reputation: 51

How do I get the current webpage name using php, when I'm also using the include function?

I have a simple webpage with a simple menu.

Each page of the webpage (for example, index.php, page-01.php etc) pulls the menu in using the include function:

<?php

include 'menu.php';

?>

I want the menu item for the current page formatted, so I'm trying to get the menu to check the name of the current page. For example, when I'm on index.php, I want a function in menu.php to return "index".

I tried using this in menu.php:

echo basename(__FILE__, '.php'); 

But it returns "menu" instead (which in retrospect, makes a lot of sense).

What can I use in my menu.php file to return the current page name?

Thanks!

Upvotes: 1

Views: 56

Answers (2)

&#193;lvaro Gonz&#225;lez
&#193;lvaro Gonz&#225;lez

Reputation: 146460

You can use $_SERVER['REQUEST_URI'] to get the path and query fragments of the URL as entered by user (/blog/technology/latest?limit=10), $_SERVER['SCRIPT_NAME'] to get the script file path relative to document root (/blog/show-category.php) and $_SERVER['SCRIPT_FILENAME'] to get the full path on server's disk (/var/www/public/blog/show-category.php). I think all these are pretty much standard across all server APIs, but it won't hurt to check in your server (run phpinfo() for a quick peek).

There's no general solution to map URLs to menu items since you can essentially code whatever structure you want. In the worst case, you'll have to store a map somewhere, maybe an array you also use to build the menu:

$routes = [
    'Latest posts' => [
        '/blog/lifestyle/latest' => 'Lifestyle',
        '/blog/technology/latest' => 'Technology',
    ],
];

If your project follows a legacy structure where individual scripts are just referenced in the URL, it should be straightforward.

Upvotes: 2

rauwitt
rauwitt

Reputation: 337

You can define a function in the included file and call it with the current file name:

index.php, page-01.php, page-02.php...:

<?php
include 'menu.php';

$file = basename(__FILE__, '.php'); 
formatePage($file);
?>

menu.php:

<?php
function formatePage($file)
{
print $file;    
}
?>

Upvotes: 1

Related Questions