【问题标题】:Logically select categories and subcategories (php,joomla,javascript,ajax)逻辑选择类别和子类别(php、joomla、javascript、ajax)
【发布时间】:2016-03-24 22:19:10
【问题描述】:

您好,我已经为 joomla 安装了 jbusinessdirectory 组件,并且我在 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

  • 子类 1 子类 2 子类 3

截图在这里:categories and sub categories screenshot

在 helper.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;
                }
            }
        }
    }
}

类别和子类别表结构截图 here

我的问题是:如何进行两个选择查询而不是一个。在第一个查询中,我得到主要类别,在第二个查询中,我得到子类别(例如:如果我从第一个查询中选择主要类别书籍,而在第二个查询中我选择儿童,则它必须只显示具有子类别的书籍童书)。

【问题讨论】:

  • 您的英语很好,先生,只有几个拼写错误,但我理解您的意思并更正了这些错误。您是否还尝试将第一个查询的结果放入变量中,并使用第二个查询例如书籍。 SELECT the columns you need FROM tablename WHERE MainCategoryColumn = $MainCategoryVariable AND SubcategoryColumn = $inputVariable
  • 感谢您的回答,但我是 php 初学者,无法理解您的意思
  • Maincategory 和 subcategory 各有一栏,但我有 parent_id 栏
  • 是的i.stack.imgur.com/7wVbQ.png这里是表结构截图
  • 是的,我在您的问题中看到了这一点,但我不知道哪一栏有什么用途。但如果我理解正确,您想从该表中选择所有内容。而parent_id存放的是主类的id

标签: javascript php mysql ajax joomla


【解决方案1】:

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

 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;
            }
    }

【讨论】:

    【解决方案2】:

    看来代码已经做了你想要的。您需要 2 个查询,但有 2 个。但是,我认为这 2 个查询的结果合并为 1 个结果,您希望将其保留为 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。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多