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

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

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 가 '20' 으로 온 경우..
1차 카테고리는 언제나 보여지고.. 20인 카테고리가 'on' class

2차 카테고리는 안보임 처리

if (strlen($ca_id) > 4) {
// 2차 카테고리
~
}

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) 등
}

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

회원로그인

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