显示子类别和子/子类别的类别

时间:2012-10-24 03:46:23

标签: php nested parent-child categories

我是Php的初学者。我开发了我的第一个动态网站 - > http://www.afrogfx.com 如果你看看我的侧边栏,你会看到类别列出我的问题,如果我创建这样的子子类别

    CAT A
    - SUB CAT A-1
    - SUB CAT A-2
      -- SUB CAT A-3 ( problem Here )
    CAT B
    - SUB CAT B-1
    - SUB CAT B-2
    - SUB CAT B-2-a
      -- SUB CAT B-2-b ( problem Here )
       --- SUB CAT B-3 ( problem Here )

类别列表代码

    <?php 
    mysql_select_db($db_name, $conn); // Change for your database  
    $query_Recordset1 = "SELECT catid,catname,parentid FROM categories ";
    $Recordset1 = mysql_query($query_Recordset1, $conn) or die(mysql_error()); // Change for your database


    while ( $row = mysql_fetch_assoc($Recordset1) )
    {
    $menu_array[$row['catid']] = array('catname' => $row['catname'],'catid' =>         $row['catid'],'parentid' => $row['parentid']);

    }
    //recursive function that prints categories as a nested html unordered list

    function generate_menu($parent)
    {
    $has_childs = false;
    //this prevents printing 'ul' if we don't have subcategories for this category
    global $menu_array;
    //use global array variable instead of a local variable to lower stack memory         requierment
    foreach($menu_array as $key => $value)
    {
    if ($value['parentid'] == $parent) 
    {       
    //if this is the first child print '<ul>'                       
    if ($has_childs === false)
    {
    //don't print '<ul>' multiple times                             
    $has_childs = true;
    //echo '<ul>';
    echo '<ul id="categories">';
    }
    echo '<li><a href="categories?catid=' . $value['catid'] . '&parentid=' .                 $value['parentid'] . '&catname=' . $value['catname'] .'">' .         $value['catname'] . '</a>';
    echo '<input type="hidden" value="' . $value['catname'] . '" />';
    generate_menu($key);

    //call function again to generate nested list for subcategories belonging to this         category

    echo '</li>';
    }
    }

    if ($has_childs === true) echo '</ul>';
    }
    //generate menu starting with parent categories (that have a 0 parent)
    ?>

现在我需要功能选择主要类别中的所有主题,当我选择它和子类别为&amp;子子类!!我该怎么做 ?? !!

1 个答案:

答案 0 :(得分:0)

我将此代码用于带子菜单的菜单

这是函数

// Menu builder function, parentId 0 is the root
function buildMenu($parent, $menu) {
 $html = "";
 if (isset($menu['parents'][$parent]))
 {
  $html .= "
  <ul>\n";
   foreach ($menu['parents'][$parent] as $itemId)
   {
      if(!isset($menu['parents'][$itemId]))
      {     
         $html .= "<li>\n  <a href='".$menu['items'][$itemId]['link']."'>".$menu['items'][$itemId]['label']."</a>\n</li> \n";

      }
      if(isset($menu['parents'][$itemId]))
      {
         $html .= "
         <li><span>" . $menu['items'][$itemId]['label'] . "<b></b></span>" ;
         $html .= buildMenu($itemId, $menu);
         $html .= "</li> \n";
      }
   }
  $html .= "</ul> \n";

  }
  return $html;
}

这是在电话中

// Select all entries from the menu table
$sql = "SELECT id, label, link, parent FROM dbo.Menu ORDER BY parent, sort, label";
$result = $database->query($sql);
$menu = array(
'items' => array(),
'parents' => array()
);
// Builds the array lists with data from the menu table
while ($items = sqlsrv_fetch_array( $result )) {
// Creates entry into items array with current menu item id ie. $menu['items'][1]
$menu['items'][$items['id']] = $items;
// Creates entry into parents array. Parents array contains a list of all items with     children
$menu['parents'][$items['parent']][] = $items['id'];
}

我的数据库中有一个带有

列的SQL表
  • id
  • 标签
  • 链接
  • 排序

如果你把你所有的顶级菜单项都作为父0,那么你希望成为父母下的子菜单的每个项目都放在父id中