2026, 새로운 도약을 시작합니다.

카테고리별 상품갯수 출력하는 방법

영카트나 그누보드를 사용하면서 도움만 받다가 다소나마 도움이 될까하고 올려봅니다.


영카트에서는 카테고리 검색할때마다 상품갯수를 검색해서 보여주는 방식을 사용하고 있습니다.

상품갯수가 적은경우에는 좋은 방법입니다.

그러나, 상품 갯수가 많아지면 로딩 속도가 느려지는 단점이 있습니다.

이를 다음과 같은 시나리오로 변경해 보았습니다.

1) 카테고리 table에 cnt 컬럼을 추가한다.
2) 상품을 등록하면, 관리자>쇼핑몰관리>분류관리 상단에 버튼을 클릭하면 카테고리별 상품갯수(cnt)를 구해온다.
3) 홈페이지에서 카테고리 클릭할때 카테고리 table의 cnt값을 읽어서 보여준다


이러한 시나리오로 작성한 코드는 다음과 같습니다.

1. MYSQL g5_shop_catetory table에 column cnt추가

ALTER TABLE `g5_shop_category` ADD COLUMN `cnt` INT(10) DEFAULT 0;


2. /adm/shop_adm/categorylist.php
<input type="submit" value="일괄수정" class="btn_02 btn">를 찾아서 바로위에 다음 코드를 추가한다.
<a href="./categorycount.php" class="btn btn_02">카운트재조정</a>

3. /adm/shop_adm/categorycount.php파일을 만들어서 다음의 내용을 추가한다.
<?php
$sub_menu = '400200';
include_once('./_common.php');

if ($w == "u" || $w == "d")
check_demo();

if ($w == '' || $w == 'u')
auth_check_menu($auth, $sub_menu, "w");
else if ($w == 'd')
auth_check_menu($auth, $sub_menu, "d");


$sql = "select ca_id from {$g5['g5_shop_category_table']}";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++){
$ca_id = $row['ca_id'];
$sql1 = "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' ";
$row1 = sql_fetch($sql1);
$cat_count = $row1['cnt'];
sql_query("update {$g5['g5_shop_category_table']} set cnt = {$cat_count} where ca_id = '{$ca_id}'");
}
echo '<script type="text/javascript">';
echo 'alert("카테고리별 상품갯수를 재설정하였습니다.");';
echo 'window.location.href = "./categorylist.php?{$qstr}";';
echo '</script>';
?>


4. mobile/skin/shop/basic/listcatetory.php
skin/shop/basic/listcategory.skin.php
theme/basic/mobile/skin/shop/basic/listcatetory.php
theme/basic/skin/shop/basic/listcategory.skin.php를 다음과 같이 변경한다.
1)
$sql = " select ca_id, ca_name from {$g5['g5_shop_category_table']} where ca_id like '{$ca_id}%' and length(ca_id) = {$len2} and ca_use = '1' order by ca_order, ca_id ";
를 찾아서 cnt를 아래와 같이 추가한다.
$sql = " select ca_id, ca_name, cnt from {$g5['g5_shop_category_table']} where ca_id like '{$ca_id}%' and length(ca_id) = {$len2} and ca_use = '1' order by ca_order, ca_id ";

2)
$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' ");
를 삭제한다.
3)
$str .= '<li><a href="'.shop_category_url($row['ca_id']).'">'.$row['ca_name'].' <span class="prd_cnt">'.$row2['cnt'].'</span></a></li>';
에서 $row2--> $row로 변경한다.
|

댓글 5개

와우 좋은 정보 감사합니다~!!!
좋은 정보네요 감사합니다.
정보 감사합니다~~

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

영카트5 팁자료실

번호 제목 글쓴이 날짜 조회
351 3년 전 조회 1,465
350 3년 전 조회 2,593
349 3년 전 조회 1,802
348 3년 전 조회 3,419
347 4년 전 조회 4,163
346 4년 전 조회 2,926
345 4년 전 조회 4,646
344 4년 전 조회 4,090
343 4년 전 조회 3,508
342 4년 전 조회 2,097
341 4년 전 조회 4,167
340 4년 전 조회 3,448
339 4년 전 조회 3,291
338 4년 전 조회 3,871
337 4년 전 조회 4,207
336 4년 전 조회 2,872
335 4년 전 조회 2,780
334 4년 전 조회 2,286
333 4년 전 조회 2,359
332 4년 전 조회 3,270
331 4년 전 조회 3,891
330 4년 전 조회 2,230
329 4년 전 조회 3,788
328 5년 전 조회 2,217
327 5년 전 조회 2,801
326 5년 전 조회 2,638
325 5년 전 조회 5,195
324 5년 전 조회 2,234
323 5년 전 조회 3,078
322 5년 전 조회 2,591
🐛 버그신고