使用 PHP 和 MySQL 构建无限级别的菜单
在网站开发中,菜单导航在用户体验中起着至关重要的作用。然而,构建支持无限级别子菜单的菜单可能具有挑战性。让我们深入研究使用 PHP 和 MySQL 实现此功能的综合方法。
数据库结构和菜单系统
您提到的数据库结构是表示分层菜单系统。每个菜单项都有一个父字段来建立父子关系。父 ID 0 表示顶级菜单项。
检索顶级菜单
您现有的用于检索顶级菜单的 PHP 代码是正确的:
<code class="php">$list = $obj->childmenu($parentid); foreach($list as $menu) { echo '<li><a href="#">'.$name.'</a></li>'; }</code>
识别子菜单的存在和显示
您的查询旨在识别菜单项是否具有子菜单并将其显示在其列表项中。为此,您需要修改 SQL 查询和 PHP 代码。
优化的 SQL 查询
使用单个 SQL 查询,我们可以检索按以下顺序订购的所有菜单项他们的父 ID 和位置:
<code class="sql">SELECT id, parent_id, title, link, position FROM menu_item ORDER BY parent_id, position;</code>
改进的 PHP 代码
修订后的 PHP 代码合并了一个堆栈来跟踪当前菜单级别,并确保有效处理嵌套菜单:
<code class="php">$items = $query_results; // Assuming $query_results contains the result of the SQL query $html = ''; $parent = 0; $parent_stack = array(); foreach ( $items as $item ) { if ( !empty($item['parent_id']) ) { $children[$item['parent_id']][] = $item; } } while ( ( $option = each( $children[$parent] ) ) || ( $parent > 0 ) ) { if ( !empty( $option ) ) { if ( !empty( $children[$option['value']['id']] ) ) { $html .= '<li>' . $option['value']['title'] . '<ul>'; array_push( $parent_stack, $parent ); $parent = $option['value']['id']; } else { $html .= '<li>' . $option['value']['title'] . '</li>'; } } else { $html .= '</ul>'; $parent = array_pop( $parent_stack ); } } echo $html;</code>
此更新的代码将有效处理菜单结构,为嵌套菜单创建 HTML 标记,并将它们显示在各自的列表项中。
以上是如何使用 PHP 和 MySQL 构建无限级别的菜单:分步指南?的详细内容。更多信息请关注PHP中文网其他相关文章!