带有mysql数组的动态菜单

时间:2011-06-11 12:26:45

标签: php mysql

任何人都可以帮助我如何在动态中重建这个吗?

<?php
    error_reporting ( E_ALL );
    $menu = array 
    (
        1 =>    array 
                (
                    'text'      =>  'Articles',
                    'class'     =>  'articles',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  0
                ),
        2 =>    array
                (
                    'text'      =>  'Users',
                    'class'     =>  'users',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  0
                ),
        3 =>    array
                (
                    'text'      =>  'Groups',
                    'class'     =>  'groups',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  0
                ),
        4 =>    array
                (
                    'text'      =>  'Settings',
                    'class'     =>  'settings',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  0
                ),
        5 =>    array
                (
                    'text'      =>  'Add new',
                    'class'     =>  'add_article',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  1
                ),
        6 =>    array
                (
                    'text'      =>  'Categories',
                    'class'     =>  'categories',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  1
                ),
        7 =>    array
                (
                    'text'      =>  'Add new',
                    'class'     =>  'add_user',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  2
                ),
        8 =>    array
                (
                    'text'      =>  'Delete',
                    'class'     =>  'delete',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  1
                ),
        9 =>    array
                (
                    'text'      =>  'Show',
                    'class'     =>  'show',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  2
                ),
        10 =>   array
                (
                    'text'      =>  'Last created',
                    'class'     =>  'last',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  9
                ),
        11 =>   array
                (
                    'text'      =>  'First created',
                    'class'     =>  'first',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  9
                ),
        12 =>   array
                (
                    'text'      =>  'All',
                    'class'     =>  'all',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  9
                ),
        13 =>   array
                (
                    'text'      =>  'None',
                    'class'     =>  'none',
                    'link'      =>  '#',
                    'show_condition'=>  TRUE,
                    'parent'    =>  9
                )
    );  

    function build_menu ( $menu )
    {
        $out = '<div class="container4">' . "\n";
        $out .= '   <div class="menu4">' . "\n";
        $out .= "\n".'<ul>' . "\n";

        for ( $i = 1; $i <= count ( $menu ); $i++ )
        {
           if ( is_array ( $menu [ $i ] ) ) 
                   {      //must be by construction but let's keep the errors home
             if ( $menu [ $i ] [ 'show_condition' ] && $menu [ $i ] [ 'parent' ] == 0 )                    {       //are we allowed to see this menu?

                          $out .= '<li class="' . $menu [ $i ] [ 'class' ] . '"><a href="' . $menu [ $i ] [ 'link' ] . '">';
                          $out .= $menu [ $i ] [ 'text' ];
                          $out .= '</a>';
                          $out .= get_childs ( $menu, $i );
                          $out .= '</li>' . "\n";
                       }
                    }
                    else 
                    {
                      die ( sprintf ( 'menu nr %s must be an array', $i ) );
                    }
                  }

        $out .= '</ul>'."\n";
        $out .= "\n\t" . '</div>';
        return $out . "\n\t" . '</div>';
    }

    function get_childs ( $menu, $el_id )
    {
        $has_subcats = FALSE;
        $out = '';
        $out .= "\n".'  <ul>' . "\n";
        for ( $i = 1; $i <= count ( $menu ); $i++ )
        {
                   if ( $menu [ $i ] [ 'show_condition' ] && $menu [ $i ] [ 'parent' ] == $el_id )  
                   {        //are we allowed to see this menu?
                      $has_subcats = TRUE;
                      $add_class = ( get_childs ( $menu, $i ) != FALSE ) ? ' subsubl' : '';
                      $out .= '<li class="' . $menu [ $i ] [ 'class' ] . $add_class . '"><a href="' . $menu [ $i ] [ 'link' ] . '">';
                      $out .= $menu [ $i ] [ 'text' ];
                      $out .= '</a>';
                      $out .= get_childs ( $menu, $i );
                      $out .= '</li>' . "\n";
                    }
                 }

        $out .= '   </ul>'."\n";
        return ( $has_subcats ) ? $out : FALSE;
    }

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Dynamic PHP/CSS menu by roScripts</title>
    <link href="css/styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <div style="width:700px;margin:100px auto">

       <h2>Dynamic PHP/CSS menu by <a href="http://www.roscripts.com" title="programming articles and tutorials" target="_blank">roScripts</a></h2>
        <?= build_menu ( $menu ) ?>
    </div>
</body>
</html>

我的数据库:

mysql> describe menuSystem;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | int(11)      | NO   | PRI | NULL    |       |
| title     | varchar(50)  | NO   |     | NULL    |       |
| class     | varchar(30)  | NO   |     | NULL    |       |
| link_url  | varchar(100) | NO   |     | NULL    |       |
| parent_id | int(11)      | NO   |     | 0       |       |
| show      | varchar(6)   | NO   |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

我试试这个,但是不行:

$sql = "SELECT * FROM menuSystem ORDER BY id ASC";
    $res = mysql_query($sql) or die (mysql_error());

            if(mysql_num_rows($res) != 0) {
                    while($row = mysql_fetch_assoc($res)) {
                            $id = mysql_real_escape_string ($row['id']);
                            $title = mysql_real_escape_string ($row['title']);
                            $class = mysql_real_escape_string ($row['class']);
                            $link_url = mysql_real_escape_string ($row['link_url']);
                            $parent_id = mysql_real_escape_string ($row['parent_id']);
                            $show = mysql_real_escape_string ($row['show']);
    $menu = array   (
            "$id" =>        array
                            (
                                    'text'          =>      "$title",
                                    'class'         =>      "$class",
                                    'link'          =>      "$link_url",
                                    'show_condition'=>      "$show",
                                    'parent'        =>      "$parent_id"
                            )
                    );

                    }

            }

1 个答案:

答案 0 :(得分:1)

HI这可能不是您问题的确切答案,但我之前做过类似的事情,所以可能会有所帮助!基本上它是一个基于初始父ID建立站点树的递归循环所以也许你可以看看并稍微修改它

/**
* build_site_tree
*
* @return void
* @author Mike Waites
**/
public function build_site_tree($parent_id)
{
    return $this->find_children($parent_id);
}

/** end build_site_tree **/

// -----------------------------------------------------------------------

/**
* find_children
* Recursive loop to find parent=>child relationships
*
* @return array $children
* @author Mike Waites
**/
public function find_children($parent_id)
{
    $this->benchmark->mark('find_children_start');

    if(!class_exists('Account_model'))
        $this->load->model('Account_model');

    $children = $this->Account_model->get_children($parent_id);

    /** Recursively Loop over the results to build the site tree **/
    foreach($children as $key => $child)
    {
        $childs = $this->find_children($child['id']);

        if (count($childs) > 0)
            $children[$key]['children'] = $childs;
    }

    return $children;

    $this->benchmark->mark('find_children_end');
 }

 /** end find_children **/

正如你所看到的那样,只是为了展示这个想法