<!DOCTYPE html>
<html lang="en">
<head>
<title>Web Programming using PHP - Coursework 2 - Task 1</title>
</head>
<body>
<header>
<h1>Web Programming using PHP - Coursework 2 - Task 1</h1>
</header>
<main>
<?php
$navLists = ['main'=>['home'=>'Home Page','study'=>'Study','research'=>'Research','sem'=>'Seminars'],
'study'=>['ug'=>'Undergraduate', 'pg'=>'Post Graduate', 'res'=>'Research Degrees'],
'research'=>['rStaff'=>'Staff','rProj'=>'Research Projects','rStu'=>'Research Students'],
'sem'=>['current'=>'Current Year','prev'=>'Previous Years'],
'ug'=>['cs'=>'Computer Science','ds'=>'Data Science'],
'pg'=>['swe'=>'Software Engineering','cf'=>'Computer Forensics']
];
// Function to generate navigation menu
function generateNavMenu($menu, $navType, $activeItem = null) {
echo '<nav>';
foreach ($menu as $key => $value) {
$url = $_SERVER['PHP_SELF'] . '?activeNAV=' . $navType . '&contentSelected=' . $key;
echo '<a href="' . $url . '">' . $value . '</a> ';
}
echo '</nav>';
}
// Display main navigation menu
generateNavMenu($navLists['main'], 'main');
// Check if a menu item is selected
$activeNAV = isset($_GET['activeNAV']) ? $_GET['activeNAV'] : 'main';
$contentSelected = isset($_GET['contentSelected']) ? $_GET['contentSelected'] : null;
// Display all submenus if necessary
if ($activeNAV !== 'main') {
generateNavMenu($navLists[$activeNAV], $activeNAV);
}
if ($contentSelected && isset($navLists[$contentSelected])) {
generateNavMenu($navLists[$contentSelected], $contentSelected);
}
// Display the text of the selected item
if ($contentSelected) {
foreach ($navLists as $menu) {
if (isset($menu[$contentSelected])) {
echo '<p>Selected: ' . $menu[$contentSelected] . '</p>';
break;
}
}
}
?>
</main>
</body>
</html>
这是我的代码,我的中间菜单有问题 我想要显示所有菜单,但我多次遇到问题 当我从上一个菜单(|软件工程|计算机取证|)中选择任何项目时,我的中间菜单(|本科|研究生|研究学位|)消失
希望我的问题能得到解决
首先,让我提请您注意,
$activeItem
的 generateNavMenu()
参数从未使用过——这表明需要重新思考和进行一些编辑。
其次,当选择
pg
选项时,假设是 Computer Forensics
,那么 $_GET['activeNAV']
将是 pg
,$_GET['contentSelected']
将是 cf
。 因此, isset($navLists[$contentSelected])
不会计算为 true
,因为 $navLists
数组没有名为 cf
的第一级键。
第三,我认为我不喜欢将层次结构实现为堆叠的两级数组的决定。正如您所知,一旦达到第三级深度,您就会失去祖先数据的踪迹。 也许重构您的函数以接收动态数量的键是明智的;那么函数本身只能被调用一次,并且可能会打印多个菜单。