Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何列出子类别?_Php_List_Categories - Fatal编程技术网

Php 如何列出子类别?

Php 如何列出子类别?,php,list,categories,Php,List,Categories,大家好,我正在尝试在以下主要类别中列出子类别: Maincat1 -子目录 Maincat2 -副歌 请看 这是列出主要CAT的代码: 在global_header.php中 $sql_select_cats_list = $db->query("SELECT category_id, items_counter, hover_title, image_path FROM " . DB_PREFIX . "categories WHERE parent_id=

大家好,我正在尝试在以下主要类别中列出子类别:


Maincat1
-子目录
Maincat2
-副歌

请看

这是列出主要CAT的代码:

在global_header.php中

$sql_select_cats_list = $db->query("SELECT category_id, items_counter, hover_title, image_path FROM
            " . DB_PREFIX . "categories WHERE parent_id=0 AND hidden=0 AND user_id=0 AND enable_auctions=1 ORDER BY order_id ASC, name ASC");

    $template->set('sql_select_cats_list', $sql_select_cats_list);

    $category_box_content = $template->process('categories_box.tpl.php');
    $template->set('category_box_content', $category_box_content);
这是categories_box.tpl.php

<? 
while ($cats_header_details = $db->fetch_array($sql_select_cats_list)) 
{
    $category_link = process_link('categories', 
        array('category' => $category_lang[$cats_header_details['category_id']],
              'parent_id' => $cats_header_details['category_id']));
?>
   <li>
       <a style="font-size: 11px; font-weight: normal; text-decoration:none;"
          href="<?=$category_link;?>"
          <?=((!empty($cats_header_details['hover_title'])) ? 'title="' . $cats_header_details['hover_title'] . '"' : '');?>
          alt="">
              <img src="<?=$cats_header_details['image_path'];?>" width="10" height="8" border="0" />
              &nbsp;
              <?=$category_lang[$cats_header_details['category_id']];?>
              <?=(($setts['enable_cat_counters']) ?
                  (($cats_header_details['items_counter']) ?
                      '(<strong>' . $cats_header_details['items_counter'] . '</strong>)' :
                      '') :
                  '');
              ?>
        </a>
   </li>
<?
}
?>

我需要帮助来完成此操作。
导航菜单

<div id="navigation">
        <ul> <li><a href="#">News</a>
                <ul> <li>National News</li> <li>International News</li> <li>Sports News </li> <li>Hollywood news</li> </ul>
            </li>
            <li>
            <a href="#">Technology</a>
                <ul> <li>IT/Software </li> <li>Hardware</li> <li>Iphone</li> <li>Neuro-Science</li> </ul>
            </li>
            <li>
            <a href="#">Sports</a>
                <ul> <li>Cricket</li> <li>Tenis</li> <li>Badminton</li> <li>Hockey</li> </ul>
            </li>
            <li>
            <a href="#">Contry</a>
                <ul> <li>India</li> <li>Shree lanka </li> <li>Bangaladesh</li> <li>England</li> </ul>
            </li>
        </ul>
    </div>

    • 国家新闻
    • 国际新闻
    • 体育新闻
    • 好莱坞新闻
        • IT/软件
        • 硬件
        • Iphone
        • 神经科学
            • 板球
            • 网球羽毛球
            • 曲棍球
                • 印度
                • 什里兰卡
                • 孟加拉国
                • 英国
上次修改:

特别感谢@furas

代码:


伪代码:

get_from_database_main_categories();

while( i_have_categories ) {
    print_category();
    get_from_database_subcategories_for_current_category();
    print_subcategories();
}
while ($result = fetch_array()) {
  if ($result['parent'] == 0) {
    $categories[$result['category_id']] = $result;
  }
  else {
    $categories[$result['parent']]['categories'][$result['category_id']] = $result;
  }
}
或者,您可以在一个SQL查询中获取所有类别和子类别,并以类似于的方式创建菜单

编辑:

我没有给你完整的代码,但大部分都是

因为您有两个文件中的代码,所以我将代码分为两部分—获取数据和打印数据

foreach($menu_multiarray as $main_category) 
{
    // print main category using 
    // $main_category['category']['category_id']
    // $main_category['category']['items_counter']
    // $main_category['category']['hover_title']
    // $main_category['category']['image_path']

    $limit = 10;

    foreach($main_category['subcategories'] as $sub_category) 
    {
        // print sub category using 
        // $sub_category['category_id']
        // $sub_category['items_counter']
        // $sub_category['hover_title']
        // $sub_category['image_path']

        $limit--;
        if( $limit == 0 ) break; 
    }

    if( $limit > 0 ) echo "link to rest of subcategorie";
}
global_header.php(获取数据)

categories_box.tpl.php(打印数据)


当然我没有测试代码,但它会告诉你该怎么做

无需多次查询即可完成此操作

SELECT * FROM categories ORDER BY parent ASC, order_id ASC, name ASC
伪代码:

get_from_database_main_categories();

while( i_have_categories ) {
    print_category();
    get_from_database_subcategories_for_current_category();
    print_subcategories();
}
while ($result = fetch_array()) {
  if ($result['parent'] == 0) {
    $categories[$result['category_id']] = $result;
  }
  else {
    $categories[$result['parent']]['categories'][$result['category_id']] = $result;
  }
}
这将直接将父级为0的所有类别添加到数组中,所有子类别将添加到父级内的子数组中。按父级排序将确保父级类别在需要时已经存在


但这只适用于一个级别,对于更多级别,您需要查看阵列中的所有现有类别以找到正确的父级。但是我认为它仍然比多个SQL查询要好。

谢谢你,我不太擅长php,如果你能提供完整的代码来帮助我,我将非常感谢你。谢谢furas,你不是人类:)天使:)再次感谢你,只有一个问题可以解决这个错误?致命错误:对C:\AppServ\www\wor\global\u header.php第93行的非对象调用成员函数query(),第93行是:return$db->query(返回空的原因。我明白了。我在函数内部使用
$db
由父函数获取类别,但
$db
在外部声明。您必须在该函数的第一行添加
global$db;
(就像在您的函数
类别导航器中一样)。我在我的代码中更改了这一点。如何为子类别设置限制10,并为其余显示所有子类别链接我在
categories_box.tpl.php
中添加
$limit
以限制子类别。如何为子类别设置限制10,并为其余显示所有子类别链接版本更好。我只提到过关于这种可能性,但没有想到如何做到这一点。
SELECT * FROM categories ORDER BY parent ASC, order_id ASC, name ASC
while ($result = fetch_array()) {
  if ($result['parent'] == 0) {
    $categories[$result['category_id']] = $result;
  }
  else {
    $categories[$result['parent']]['categories'][$result['category_id']] = $result;
  }
}