我有一个简单的网页和一个简单的菜单。
网页的每个页面(例如index.php, page-01.php等)使用include函数将菜单拉进来:
<?php
include 'menu.php';
?>
我想对当前页面的菜单项进行格式化,所以我试图让菜单检查当前页面的名称。例如,当我使用index.php时,我希望menu.php中的函数返回"index"
我试着在menu.php中使用这个:
echo basename(__FILE__, '.php');
但是它返回"menu"相反(回想起来,这很有意义)。
我可以在我的menu.php文件中使用什么来返回当前页面名称?
谢谢!
可以使用$_SERVER['REQUEST_URI']
获取用户输入的URL的路径和查询片段(/blog/technology/latest?limit=10
),$_SERVER['SCRIPT_NAME']
获取相对于文档根(/blog/show-category.php
)的脚本文件路径,$_SERVER['SCRIPT_FILENAME']
获取服务器磁盘上的完整路径(/var/www/public/blog/show-category.php
)。我认为所有这些在所有服务器api中都是相当标准的,但是检查一下你的服务器(运行phpinfo()
快速浏览一下)不会有什么坏处。
没有将url映射到菜单项的通用解决方案,因为您基本上可以编写任何您想要的结构。在最坏的情况下,您将不得不在某处存储一个映射,可能是一个数组,您也可以使用它来构建菜单:
$routes = [
'Latest posts' => [
'/blog/lifestyle/latest' => 'Lifestyle',
'/blog/technology/latest' => 'Technology',
],
];
如果您的项目遵循遗留结构,其中单个脚本仅在URL中引用,那么它应该是直接的。
您可以在包含的文件中定义一个函数,并使用当前文件名调用它:
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;
}
?>