【发布时间】:2013-03-09 18:19:39
【问题描述】:
我正在使用 PHP 开发一个网站,这是我第一次尝试动态菜单。
我正在做的是为页面创建了一个表格。
表结构如下:
____________________________________________________________________________
|page_id|title|url|content|menu_title|show_on_navuigation|is_sub|parent_page|
|_______|_____|___|_______|__________|___________________|______|___________|
这里is_sub表示是否是某个主菜单的下拉菜单。而parent_page是子菜单的主菜单。
现在,我想要的是,像
我创建了 2 个父页面:
About Us 和 Test
还有 2 个子菜单:Test aboutus 和 testsub,
test aboutus 是 About Us 的 sub,testsub 是 test 的 sub。
查询和循环实际上应该如何,以便菜单完美呈现。
提前致谢。
这是我的菜单结构:
<ul>
<li class='has-sub'><a href='#'><span>About Us</span></a>
<ul>
<li><a href='corporateprofile'><span>Corporate Profile</span></a></li>
<li class='last'><a href='visionandmission'><span>Vision & Mission</span></a></li>
</ul>
</li>
<li class='has-sub'><a href='#'><span>Business Services</span></a>
<ul>
<li><a href='recruitment'><span>Recruitment</span></a></li>
<li><a href='training'><span>Training</span></a></li>
<li><a href='executivesearch'><span>Executive Search</span></a></li>
<li><a href='payroll'><span>Payroll</span></a></li>
<li class='last'><a href='backgroundverification'><span>Background Verification</span></a></li>
</ul>
</li>
<li class='has-sub'><a href='#'><span>Employers</span></a>
<ul>
<li><a href='enquiry'><span>Enquiry</span></a></li>
<li><a href='jobdescription'><span>Job Description</span></a></li>
<li><a href='employercontract'><span>Employer Contract</span></a></li>
<li class='last'><a href='feedback'><span>Feedback</span></a></li>
</ul>
</li>
<li class='has-sub'><a href='javascript:;'><span>Job Seeker</span></a>
<ul>
<li><a href='applyforjob'><span>Apply For Job/Register</span></a></li>
<li><a href='careertips'><span>Career Tips</span></a></li>
<li><a href='interview Questions'><span>Interview Questions</span></a></li>
<li><a href='interviewprocess'><span>Interview Process</span></a></li>
<li class='last'><a href='corporatedress'><span>Corporate Dress</span></a></li>
</ul>
</li>
<li class='has-sub'><a href='#'><span>Franchise</span></a>
<ul>
<li class='last'><a href='#'><span>Franchise Enquiry Form</span></a></li>
</ul>
</li>
<li class='last'><a href='#'><span>Contact us</span></a></li>
</ul>
<?php
function displayMenu($parent_page_id) {
$sql = "SELECT * FROM `pages` WHERE `parent_page` = '$parent_page_id'"; // sql
$result = mysql_query($sql);
if( mysql_num_rows($result) === 0 ) { // mysql_num_rows() is deprecated, but you are using mysql extension so that's why I show it here
return true; // exit function
} // else, continue to rest of function
echo '<ul>';
while($row = mysql_fetch_assoc($result)) { // deprecated mysql php function here for simplicity
echo '<li><a href="' . $result['url'] . '">' . $result['menu_title'] . '</a>'; // no closing </li> yet
displayMenu($row['page_id']); // this is the recursive part
echo '</li>'; // close the <li> from before the recursion
}
echo '</ul>';
}
$get_base_menu = mysql_query("SELECT * FROM pages WHERE parent_page = 0");
while($fetch_base_menu = mysql_fetch_array($get_base_menu))
{
$parent_page_id = $fetch_base_menu['page_id'];
displayMenu($parent_page_id);
}
?>
【问题讨论】:
-
你真的想用mysql做所有这些工作来做一个菜单吗?整个站点的菜单通常相同,并且很少更改。因此,我认为将其硬编码为 HTML 是有道理的。我认为,如果您要经常更改它,并且如果您正在创建某种“后端”来为您的最终用户提供一种编辑菜单结构的方法,那么将其放入数据库中才有意义。否则,为什么要为此使用数据库?
-
是的巴特尔。客户希望将来可以添加更多页面。所以我不得不为页面和菜单创建一个表格
-
@ButtleButkus 这就是我的想法。通常菜单项通常是相同的,除了可能会更改登录/注销和注册/登录。
-
Vishal,因此您的客户可能希望在菜单中创建任意数量的级别,以访问不同的页面。但是他们将如何创建页面?我假设如果他们要处理新页面的编码,他们可以处理向菜单“小部件”添加一些 HTML。
-
小牛,我在后台创建了一个表单,可以创建页面。