codememo

카테고리 및 하위 카테고리 논리적 선택(php, joomla, javscript, jax)

tipmemo 2023. 9. 25. 22:46
반응형

카테고리 및 하위 카테고리 논리적 선택(php, joomla, javscript, jax)

안녕하세요 joomla용 jbusiness directory component를 설치했고 tmpl/default.php 파일에 mod_jbusiness directory(비즈니스 목록 검색 모듈입니다)라는 모듈이 있습니다. 코드 선택: (아래 참조)

<?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

스크린샷 여기: 카테고리하위 카테고리 스크린샷

도우미.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;
}

그리고 마지막으로 modjbusines directory.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;
                }
            }
        }
    }
}

카테고리 및 하위 카테고리 테이블 구조 스크린샷 여기

제 질문은 다음과 같습니다.하나가 아닌 두 개의 선택 쿼리를 만들려면 어떻게 해야 합니까?첫 번째 쿼리에서 주요 범주를 얻고 두 번째 쿼리에서 하위 범주를 얻습니다(예: 첫 번째 쿼리에서 주요 범주 책을 선택하고 두 번째 쿼리에서 하위 범주 책이 있는 책만 표시해야 함).

범주를 가져오려면 아래 쿼리를 사용할 수 있습니다.

 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개의 결과로 유지하기를 원하는 것 같습니다.

카테고리 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;
}

파라미터를 검색하는 줌라 코드는 잘 모르지만 메인 카테고리를 선택할 때 게시하면 ID를 찾을 수 있습니다.

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

    $subCategories = modJBusinessDirectoryHelper::getChildCategoryList($categoryId);
    }
}

언급URL : https://stackoverflow.com/questions/34351675/logically-select-categories-and-subcategories-php-joomla-javascript-ajax

반응형