카테고리별 상품갯수 출력하는 방법 정보
카테고리별 상품갯수 출력하는 방법본문
영카트나 그누보드를 사용하면서 도움만 받다가 다소나마 도움이 될까하고 올려봅니다.
영카트에서는 카테고리 검색할때마다 상품갯수를 검색해서 보여주는 방식을 사용하고 있습니다.
상품갯수가 적은경우에는 좋은 방법입니다.
그러나, 상품 갯수가 많아지면 로딩 속도가 느려지는 단점이 있습니다.
이를 다음과 같은 시나리오로 변경해 보았습니다.
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로 변경한다.
영카트에서는 카테고리 검색할때마다 상품갯수를 검색해서 보여주는 방식을 사용하고 있습니다.
상품갯수가 적은경우에는 좋은 방법입니다.
그러나, 상품 갯수가 많아지면 로딩 속도가 느려지는 단점이 있습니다.
이를 다음과 같은 시나리오로 변경해 보았습니다.
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로 변경한다.
추천
7
7
댓글 5개
와우 좋은 정보 감사합니다~!!!
감사합니다
좋은 정보네요 감사합니다.
정보 감사합니다~~
아 이런