리스트 카테고리 하위메뉴.. 고수님들 도와주세요 ㅠㅠ

리스트 카테고리 하위메뉴.. 고수님들 도와주세요 ㅠㅠ

QA

리스트 카테고리 하위메뉴.. 고수님들 도와주세요 ㅠㅠ

본문

안녕하세용

listcategory.skin.php 파일입니다..

 


<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
 
$str = '';
$exists = false;
 
$ca_id_len = strlen($ca_id);
$len2 = $ca_id_len + 2;
$len4 = $ca_id_len + 4;
if($ca_id_len == 2) {
    $ca_id = substr($ca_id,0,2);
    $sql = " select ca_id, ca_name from {$g5['g5_shop_category_table']} where ca_id like '$ca_id%' and length(ca_id) = 4 and ca_use = '1' order by ca_order, ca_id ";
 
    $result = sql_query($sql);
 
    while ($row=sql_fetch_array($result)) {
 
        $row2 = sql_fetch(" select count(*) as cnt from {$g5['g5_shop_item_table']} where (ca_id like '{$row['ca_id']}%' or ca_id2 like '{$row['ca_id']}%' or ca_id3 like '{$row['ca_id']}%') and it_use = '1'  ");
   
        $str .= '<li><a href="'.shop_category_url($row['ca_id']).'">'.$row['ca_name'].' ('.$row2['cnt'].')</a></li>';
        $exists = true;
    }
} elseif($ca_id_len == 4){
    $ca_id = substr($ca_id,0,2);
    $sql = " select ca_id, ca_name from {$g5['g5_shop_category_table']} where ca_id like '$ca_id%' and length(ca_id) = 4 and ca_use = '1' order by ca_order, ca_id ";
 
    $result = sql_query($sql);
 
    while ($row=sql_fetch_array($result)) {
 
        $row2 = sql_fetch(" select count(*) as cnt from {$g5['g5_shop_item_table']} where (ca_id like '{$row['ca_id']}%' or ca_id2 like '{$row['ca_id']}%' or ca_id3 like '{$row['ca_id']}%') and it_use = '1'  ");
   
        $str .= '<li><a href="'.shop_category_url($row['ca_id']).'">'.$row['ca_name'].' ('.$row2['cnt'].')</a></li>';
        $exists = true;
    }
} elseif($ca_id_len == 6){
    $ca_id = substr($ca_id,0,6);
    $sql = " select ca_id, ca_name from {$g5['g5_shop_category_table']} where ca_id like '$len4%' and length(ca_id) = 4 and ca_use = '1' order by ca_order, ca_id ";
 
    $result = sql_query($sql);
 
    while ($row=sql_fetch_array($result)) {
 
        $row2 = sql_fetch(" select count(*) as cnt from {$g5['g5_shop_item_table']} where (ca_id like '{$row['ca_id']}%' or ca_id2 like '{$row['ca_id']}%' or ca_id3 like '{$row['ca_id']}%') and it_use = '1'  ");
   
        $str .= '<li><a href="'.shop_category_url($row['ca_id']).'">'.$row['ca_name'].' ('.$row2['cnt'].')</a></li>';
        $exists = true;
    }
}
 
if ($exists) {
 
    // add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
    add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">', 0);
?>
 
<!-- 상품분류 1 시작 { -->
<aside id="sct_ct_1" class="sct_ct">
    <h2>현재 상품 분류와 관련된 분류</h2>
    <ul>
        <li><a href="<?php echo shop_category_url(substr($ca_id,0,2)); ?>">전체</a></li>
        <?php echo $str; ?>
    </ul>
</aside>
<!-- } 상품분류 1 끝 -->
 
<?php }

 

전체 = 10

고양이 1 = 1010

고양이 2 = 1020

고양이 3 = 1030

이상태에서 아무대나 들어가도 저 메뉴가 고정돼어있는 상태입니다..

 

여기서 고양이 1,2,3을 눌렀을때 하위메뉴로 고양이 1을 누르면 고양이 4 = 101010 또는 고양이2를 누르면 102010 이런식으로 하위메뉴가 생기게 할수 있을까요..? 도와주세요고수님들 ㅠㅠ 냥냥..2042281117_1669569340.5549.png

 

 

이 질문에 댓글 쓰기 :

답변 2

 

 

    elseif($ca_id_len == 4){

   // $ca_id = substr($ca_id,0,2);

// 이렇게 중간에 $ca_id를 바꾸는 것은 좋지 않습니다. 필요하다면 이렇게...

 $ca_id_tmp = substr($ca_id,0,2);

// sql은 이렇게

    $sql = " select ca_id, ca_name from {$g5['g5_shop_category_table']} where ca_id like '$ca_id__' and ca_use = '1' order by ca_order, ca_id ";

 

    $result = sql_query($sql);

 

    while ($row=sql_fetch_array($result)) {

 

        $row2 = sql_fetch(" select count(*) as cnt from {$g5['g5_shop_item_table']} where (ca_id like '{$row['ca_id']}%' or ca_id2 like '{$row['ca_id']}%' or ca_id3 like '{$row['ca_id']}%') and it_use = '1' ");

   

오오... 고수님.. 좋은 팁과 가르침 정말감사합니다 ㅠㅠ 저근데... 이게 메뉴를 안사라지게 딱 고정하고싶은데 왜 사라지는건가용..? 6자리의 ca_id의 값을 가져왔을때 카테고리 리스트가 사라져버립니다.. 이거를 이해하지 못하겠어요 ㅠㅠ 뭔가 클릭했을때 그 탭이 엑티브상태가 돼었으면도 좋겠고.. 메뉴판느낌을 내고싶은데 sql이 너무나 어려웁내요 헝 ㅠㅠ 다음으로 반환할 값이 없을때 메뉴랑 탭이 사라지는거같은데 이것을 방지하는 방법을 모르겠습니다... ㅠㅠ
혹시 ca_id=값에 따라서 사이트 페이지를 변경할수있는 방법이 있나요 ??

가장 쉽고 할 수 있는 것부터 시작하는 것이 좋습니다. 그런 후 천천히 하나씩 모래성을 쌓아나갑니다.

 

1) 테스트 페이지를 만듭니다. /test.php

 

2) common.php 를 인클루드 합니다. include "common.php";

=> 그누보드의 모든 함수/라이브러리를 사용할 수 있습니다.

 

3) 1차 분류 카테고리 출력부터 해봅니다.

* /test.php

include "common.php";

$sql = "

  select ca_id, ca_name

   from {$g5['g5_shop_category_table']}

  where length(ca_id) = 2

";

$result = sql_query($sql);

while ($row = sql_fetch_array($result)) {

  //1차 카테고리 표시

}

4) 브라우저에서 의도한 대로 나오는 지 확인합니다. ~/test.php

 

이렇게 가장 쉬운것부터 한 다음.. 한 단계씩 살을 붙여 나갑니다.

 

ca_id 가 '2040' 으로 온경우..

1차 카테고리는 언제나 보여지고.. 20인 카테고리가 'on' class 를 가지면 되는거죠?

2차 카테고리는 '20' 으로 시작하는 2차 카테고리가 모두 보여지고 2040인 카테고리가 'on' class를 가지면 되는거죠?

 

 

* /test.php

include "common.php";

$sql = "

  select ca_id, ca_name

   from {$g5['g5_shop_category_table']}

  where length(ca_id) = 2

";

$result = sql_query($sql);

while ($row = sql_fetch_array($result)) {

  if (ca_id == $row['ca_id']) 

    $class = "on"; // ca_id=20 인 카테고리 'on' class 처리

  else

    $class = "";

}

 

// '20' 에 해당하는 2차 카테고리

$sql = "

  select ca_id, ca_name

   from {$g5['g5_shop_category_table']}

  where length(ca_id) = 4

    and ca_id like '20%'

";

 

~

 

 

헉. 저근데... 왜 class on 부분의 class가 안붙는거죠 ..? 기존에 row2랑 str을 가져와서 html로 출력했는데.. calss 에서 on이 붙지않아요.. 제가 뭔가 이상하게 하고있는거같은데 class를 붙이는 메커니즘을 이해하지 못하고있는거 같습니다 ㅠㅠ

(정정)

while ($row = sql_fetch_array($result)) {

  if (substr($ca_id, 0, 2) == $row['ca_id']) // 앞 2자리가 1차 카테고리와 같은 경우

    $class = "on"; // ca_id=20 인 카테고리 'on' class 처리

  else

    $class = "";

  //echo $ca_id; // ca_id 값 확인
  //echo $row['ca_id']; // db 에 저장된 ca_id 값 확인
  //echo substr($ca_id, 0, 2); // ca_id 앞 2자리값 확인

  echo '<li class="' . $class . '">' . $row['ca_name'] . '</li>';
}

ca_id 가 3020 인 경우,

1차 카테고리는 언제나 보여지고.. 30인 카테고리가 'on' class

2차 카테고리는 '30' 으로 시작하는 2차 카테고리가 모두 보여지고 3020인 카테고리가 'on' class

* /test.php


include "common.php";
$sql = "
  select ca_id, ca_name
   from {$g5['g5_shop_category_table']}
  where length(ca_id) = 2
";
$result = sql_query($sql);
while ($row = sql_fetch_array($result)) {
  if (substr($ca_id, 0, 2) == $row['ca_id']) 
    $class = "on"; // 1차 카테고리 'on' class 처리
  else
    $class = "";
   echo '<li class="' . $class . '">' . $row['ca_name'] . '</li>';
}
 
// 2차 카테고리
if (strlen($ca_id) >= 4) {
	$sql = "
	  select ca_id, ca_name
	   from {$g5['g5_shop_category_table']}
	  where length(ca_id) = 4
	    and ca_id like '{$ca_id}%'
	";
	$result = sql_query($sql);
	while ($row = sql_fetch_array($result)) {
	  if (substr($ca_id, 0, 4) == $row['ca_id']) 
	    $class = "on"; // ca_id=3020 인 카테고리 'on' class 처리
	  else
	    $class = "";
	   echo '<li class="' . $class . '">' . $row['ca_name'] . '</li>';
	}

	~
}

이거계속 하다보니까 뭔지 알거같아요! 선택됀 버튼에 on이 붙으면 css로 스타일을 줘서 선택돼게 할수가있군요 근데 이걸로 접속했을때 2차분류에 들어가면 1차분류가 출력이안돼니 여기서 계속 막히내요 ㅠㅠ

ca_id=3020 으로 브라우저로 접속했을 때..

10, 20, 30 1차 카테고리가 나오지 않는다는 의미인가요?

include "common.php";
$sql = "
  select ca_id, ca_name
  from {$g5['g5_shop_category_table']}
  where length(ca_id) = 2
";
$result = sql_query($sql);
while ($row = sql_fetch_array($result)) {
  if (substr($ca_id, 0, 2) == $row['ca_id'])
    $class = "on"; // 1차 카테고리 'on' class 처리
  else
    $class = "";
  echo '<li class="' . $class . '">' . $row['ca_name'] . '</li>';
}

1차 카테고리 출력 코드 부분에는 if 조건이 전혀 없기 때문에.. ca_id=3020 이건, ca_id=10 이건 ca_id 가 없건.. 매번 나옵니다.

그럼에도 나오지 않는다면.. 원인을 찾아나가야 됩니다.
echo $sql;
sql 문 쿼리 실행 https://marscompany.tistory.com/6
while() {
print_r2($row) 등
}

답변을 작성하시기 전에 로그인 해주세요.
전체 17,059
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT