【问题标题】:How can I add categories and subcategories to an array?如何将类别和子类别添加到数组中?
【发布时间】:2014-02-02 23:48:07
【问题描述】:

我想列出主要类别和子类别但不知道如何?

我想做的是这样的

Main cat 1
-subcat 1
-subcat 2
-subcat others
Main cat 2
-subcat 1
-subcat 2
-subcat others

我有两个部分代码,它们只打印这样的主要类别,

主要猫1 主要猫2 主猫3

这里是总代码尝试不同的方式,但不能做到。

$sql_select_cats_list = $db->query("SELECT category_id, items_counter, hover_title 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");


$cats = array();
while($row=$db->fetch_array($sql_select_cats_list)) {
    $cats[$row['category_id']] = $row;
}
$cat_ids = implode(', ', array_keys($cats));


$sql_select_subcats_list = $db->query("SELECT sub.category_id, sub.items_counter, sub.hover_title, parent.order_id FROM " . DB_PREFIX . "categories sub LEFT JOIN " . DB_PREFIX . "categories parent ON (parent.category_id=sub.parent_id) WHERE parent.category_id IN (" . $cat_ids . ") AND sub.hidden=0 AND sub.user_id=0 AND sub.enable_auctions=1 ORDER BY parent.order_id ASC, sub.order_id ASC, sub.name ASC");


while($row=$db->fetch_array($sql_select_subcats_list)) {
    if(!isset($subs[$row['parent_id']])) {
        $subs[$row['parent_id']] = array();
    }
    $subs[$row['parent_id']][] = $row;
}


$template->set('cats_list', $cats);
$template->set('subs_list', $subs);


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

我正在尝试使用此代码列出类别和子类别:

 <?php
    foreach($cats as $parent_id => $cats_header_details) {
       $category_link = process_link('categories', array('category' => $category_lang[$cats_header_details['category_id']], 'parent_id' => $cats_header_details['category_id']));


       // subcategory links:
       if(isset($subs_list[$parent_id])) {
        foreach($subs_list[$parent_id]) as $sub) { 
            // do something with your subcategory


        }
       }
    ?>   




 <li><a style="font-size: 11px; font-weight: normal;" href="<?=$category_link;?>" 
                <?=((!empty($cats_header_details['hover_title'])) ? 'title="' . $cats_header_details['hover_title'] . '"' : '');?> alt="">


<img src="themes/<?=$setts['default_theme'];?>/img/arrow.gif" border="0" hspace="4"><?=$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>   <? 
            } 
            ?>

我收到此警告:认为 foreach 正在返回空!找不到解决办法。

Warning: Invalid argument supplied for foreach() in C:\AppServ\www\site\themes\temamiz\templates\categories_box.tpl.php on line 14

并使用下面的代码在页面上打印主要类别。

<?=$category_box_content;?>

【问题讨论】:

    标签: php


    【解决方案1】:

    基本上将您的预模板代码更改为首先从您的类别中获取所有 category_id。然后获取与该列表匹配的子猫列表。

    现在处理 subs,通过它们的父 id 轻松找到它们(第二个循环)。

    然后,不是将 sql 资源传递给您的模板(错误的形式),而是分发 2 个数组(cats 和 subcats)。

    在您的模板中,然后循环遍历类别,然后在该循​​环中,您有第二个循环,它仅在该特定类别的子目录上循环(如果有)。

    在代码中,像这样:

    $sql_cats_list = $db->query("SELECT category_id, items_counter, hover_title 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");
    $cats = array();
    while($row=$db->fetch_array($sql_cats_list)) {
        $cats[$row['category_id']] = $row;
    }
    $cat_ids = implode(', ', array_keys($cats));
    $sql_subcats_list = $db->query("SELECT sub.category_id, sub.items_counter, sub.hover_title, parent.order_id FROM " . DB_PREFIX . "categories sub LEFT JOIN " . DB_PREFIX . "categories parent ON (parent.category_id=sub.parent_id) WHERE parent.category_id IN (" . $cat_ids . ") AND sub.hidden=0 AND sub.user_id=0 AND sub.enable_auctions=1 ORDER BY parent.order_id ASC, sub.order_id ASC, name ASC");
    while($row=$db->fetch_array($sql_subcats_list)) {
        if(!isset($subs[$row['parent_id']])) {
            $subs[$row['parent_id']] = array();
        }
        $subs[$row['parent_id']][] = $row;
    }
    
    $template->set('cats_list', $cats);
    $template->set('subs_list', $subs);
    
    $category_box_content = $template->process('categories_box.tpl.php');
    $template->set('category_box_content', $category_box_content);
    

    我假设这是您的 categories_box.tpl.php 文件 (?)

     <?php
    foreach($cats as $parent_id => $cats_header_details) {
    $category_link = process_link('categories', array('category' => $category_lang[$cats_header_details['category_id']], 'parent_id' => $cats_header_details['category_id'])); 
    // subcategory links:
       if(isset($subs_list[$parent_id])) {
        foreach($subs_list[$parent_id] as $sub) {
        // do something with your subcategory
        }
       }
    ?>
    <li><a style="font-size: 11px; font-weight: normal;" href="<?=$category_link;?>"
    <?=((!empty($cats_header_details['hover_title'])) ? 'title="' . $cats_header_details['hover_title'] . '"' : '');?> alt=""><img src="themes/<?=$setts['default_theme'];?>/img/arrow.gif" border="0" hspace="4"><?=$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>   <? 
    } 
    ?>
    

    并使用下面的代码在页面上打印主要类别。

    <?=$category_box_content;?>
    

    【讨论】:

    • 非常感谢 Tularis,现在我有另一个错误; Invalid argument supplied for foreach() in C:\AppServ\www\site\themes\temamiz\templates\categories_box.tpl.php on line 14
    猜你喜欢
    • 2015-06-07
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多