当前位置: 首页 > 知识库问答 >
问题:

从逻辑上选择类别和子类别(php、joomla、javascript、ajax)

蒲昊
2023-03-14

你好,我已经为joomla安装了jBusiness目录组件,我在tmpl/default.php文件中有一个名为mod_jbusinessdirectory的模块(这是一个商业列表搜索模块),我有选择代码:(见下文)

<?php if($params->get('showCategories')){ ?>
    <div class="select">
        <div class="categoryic"></div>
        <select name="categorySearch" class="select-styled" id="categories">
    <option value="0">category</option>
    <?php foreach($categories as $category){?>
    <option value="<?php echo $category->id?>" <?php echo $session->get('categorySearch')==$category->id && $preserve?" selected ":"" ?> ><?php echo $category->name?></option>
    <?php if(!empty($category->subcategories)){?>
    <?php foreach($category->subcategories as $subCat){?>
    <option value="<?php echo $subCat->id?>" <?php  echo $session->get('categorySearch')==$subCat->id && $preserve?" selected ":"" ?> >-- <?php echo $subCat->name?></option>
    <?php }?>
      <?php }?>
      <?php }?>
    </select>
    </div>
 <?php }?>

从这段代码中,我得到如下类别和子类别:

>

  • 主要类别1
  • 子类别1子类别2子类别3

    主要类别2

    此处截图:类别和子类别截图

    在助手中。php我有从数据库中获取类别和子类别的函数

    static function getMainCategories(){
        $db = JFactory::getDBO();
        $query = ' SELECT * FROM #__jbusinessdirectory_categories where parent_id=1 and published=1  order by name';
        $db->setQuery($query);
        return $db->loadObjectList();
    }
    
    static function getSubCategories(){
        $db = JFactory::getDBO();
        $query = ' SELECT c.* FROM #__jbusinessdirectory_categories c
                   inner join  #__jbusinessdirectory_categories  cc  on c.parent_id = cc.id  where c.parent_id!=1  and cc.parent_id = 1 and c.published=1
                   order by c.name';
        $db->setQuery($query,0,1000);
        $result = $db->loadObjectList();
    
        return $result;
    }
    

    最后,在modjbusinesdirectory.php文件中,我有这样的PHP:

    if($params->get('showCategories')){
        $categories =  modJBusinessDirectoryHelper::getMainCategories();
        if($params->get('showSubCategories')){
            $subCategories = modJBusinessDirectoryHelper::getSubCategories();
            foreach($categories as $category){
                foreach($subCategories as $subCat){
                    if($category->id == $subCat->parent_id){
                        if(!isset($category->subcategories)){
                            $category->subcategories = array();
                        }
                        $category->subcategories[] = $subCat;
                    }
                }
            }
        }
    }
    

    类别和子类别表结构截图

    我的问题是:如何进行两个select查询而不是一个查询。其中,在第一次查询中,我获得了主类别,在第二次查询中,我获得了子类别(例如:如果我从第一次查询中选择了主类别图书,在第二次查询中选择了子类别图书,则必须仅显示具有子类别图书的图书)。

  • 共有2个答案

    令狐良骏
    2023-03-14

    代码似乎已经执行了您想要的操作。你想要2个查询,有2个。但是,我认为这两个查询的结果合并成一个结果,你想把它变成两个结果。

    您必须添加接受类别ID参数的新类别函数

    <?php
    
    static function getCategoryById($id){
      $id = intval( $id ); 
      $db = JFactory::getDBO();
      $query = '
           SELECT * 
           FROM #__jbusinessdirectory_categories
           WHERE 
                 published=1
             AND id= '.$id;
      $db->setQuery($query);
      return $db->loadObject();
    }
    
    static function getChildCategoryList($id){
      $id = intval($id);
      $db = JFactory::getDBO();
      $query = '
           SELECT c.*
           FROM #__jbusinessdirectory_categories c
           INNER JOIN  #__jbusinessdirectory_categories  cc
             ON c.parent_id = cc.id
           WHERE c.parent_id!=1
           AND cc.id = '.$id.'
           AND c.published=1
           ORDER BY c.name';
         $db->setQuery($query,0,1000);
         $result = $db->loadObjectList();
    
         return $result;
    }
    

    我不熟悉检索参数的Joomla代码,但如果您在某人选择主类别时发布ID,则可以找到该ID。

    <?php
    if($params->get('showCategories')){
        $categoryId = (int) $params->get('mainCategory');
        $category   =  modJBusinessDirectoryHelper::getCategoriesById($categoryId);
    
        $subCategories = modJBusinessDirectoryHelper::getChildCategoryList($categoryId);
        }
    }
    
    谭修竹
    2023-03-14

    您可以使用下面的查询来获取类别。

     function all_cat($id='',$child_of_child='parent')
        {
                $CI =& get_instance();
                if($id="")
                {
                    $query = $CI->db->get_where("__jbusinessdirectory_categories",array('parent_id'=>1));
                }
                else
                {
                     $query = $CI->db->get_where("__jbusinessdirectory_categories",array('parent_id'=>$id));
                }   
    
                //echo $CI->db->last_query()."<br>";
                $op = '';
                if($query->num_rows() > 0)
                {
                    $res = $query->result();
                    //pr($res);
                    if($child_of_child == 'child')
                    {
                        $op .= '<ul class="sub_cat  mrg-top-5" style="display:none;" id="'.$id.'">';
                    }
                    else
                    {
                        $op .= '<ul class="sub_cat " id="'.$id.'">';
                    }
                    foreach($res as $r)
                    {
                        $op .= '<li><a href="'.site_url('category/search/9/1V1/'.$r->id).'" class="temp">'.ucwords($r->name).'</a>
                                </li>';
                        $op .= all_cat($r->id,$child_of_child='child');
                    }   
                    return $op .= '</ul>';
                }
                else
                {
                    return $op;
                }
        }
    
     类似资料:
    • 问题内容: 我想在选择 列表(下拉列表)中显示类别,子类别和子子类别,就像WordPress在其管理面板中显示的方式一样。 首先看一下我的数据库表(tb_categories)- 数据库表 我想要以下HTML格式的输出- 输出 两项“无”和“未分类”在代码中进行了硬编码。我 想知道如何 使用选择列表选项以层次结构顺序显示类别及其子类别。 我正在尝试使用自我连接的以下sql查询。这 是- And t

    • 我有两个表的项目和类别。类别表是自联接表。 项目表具有以下列ID、项目名称、类别ID Categories表包含以下列CATID、category\u name、parent\u ID 我需要选择在一个类别和这个主类别的子类别下列出但不起作用的项目。这里是mysql,它只返回sub。

    • 我目前有一个代码片段,其中对于每个类别,它将找到子类别: 将递归获取一个类别的子级: 目前,使用,只检索子类别的子类别,因此如果每个子类别都有自己的子类别,则不会将其保存到子类别中。 我如何显示子子类别给我们的子类别? 我想用我的代码做的是获取一个父级,获取它的子级,然后将这些子级中的每一个视为父级,递归地获取它的子级,但是我的JSON输出并没有反映这一点。只有父对象有子对象-子对象没有子对象(尽

    • 我已经为产品创建了一些自定义类别,它有子类别,子类别还有更多的子类别。现在我首先显示主要类别。如果我在那里显示子类别,那么将显示与该类别及其子类别相关的所有子类别。我想一步一步地向他们展示。也就是说,如果用户单击主类别,则会转到其子类别页面。如果用户单击其子类别之一,则应转到子类别,如果没有子类别,则显示产品。这是什么代码 它覆盖了以前的排序顺序。也就是说,如果从仪表板中,我们按排序顺序给出2到3

    • 类别表的结构: id 标题 家长id 项目表的结构: id 标题 is_active(0) category_id 表结构 表通过一对多关系与category_id字段相关联。1类可以有很多项。 类别表中的两级层次结构。这定义了主要类别和子类别。类别是那些父项id=NULL的记录。和子类别,这些记录中的父项_id=到某个id。 一个项目可以属于主类别(其中parent_id=null)和子类别(子

    • 我在书店网站上有三张桌子。类别、子类别和书籍我想在将数据插入图书表时选择类别和相关子类别,但子类别无法从类别中获取id,并且在列表中未显示任何子类别我的代码如下: