Compare commits

6 Commits

Author SHA1 Message Date
이대환
2e33dc43f3 쇼핑몰 사이트맵 xml 자동 생성 2026-09-08 13:59:18 +09:00
이주일
5f3687deb1 Revert "fix: 관리자 대시보드 쇼핑몰 선택 유지"
This reverts commit 7b24a5395f.
2026-08-26 23:12:45 +09:00
이주일
a59dc92601 Revert "fix: 관리자 대시보드 게시글 링크 쇼핑몰 코드 전달"
This reverts commit 5527c23171.
2026-08-26 23:12:45 +09:00
이주일
5527c23171 fix: 관리자 대시보드 게시글 링크 쇼핑몰 코드 전달 2026-08-26 23:07:17 +09:00
이주일
7b24a5395f fix: 관리자 대시보드 쇼핑몰 선택 유지 2026-08-26 23:00:02 +09:00
이주일
87da1e547e fix: 모바일 전체메뉴 하위 카테고리 표시 개선 2026-08-26 17:22:16 +09:00
14 changed files with 277 additions and 19 deletions

View File

@@ -3,6 +3,7 @@ package com.wb.domainserver.domain.admin.store.sopmal.mapper;
import java.util.List;
import com.wb.domainserver.domain.admin.store.sopmal.vo.Shop;
import com.wb.domainserver.domain.gcone.goods.goods.vo.BOGoodsVO;
import com.wb.domainserver.domain.gcone.promtn.coupon.vo.BOCouponVO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@@ -202,4 +203,7 @@ public interface BOMaSopmalMapper {
/*전체 쇼핑몰 목록*/
List<DataMap> selectSopmalList();
// XML 수정 임시
public List<DataMap> selectSitemapXml(String sopmalCd);
}

View File

@@ -19,6 +19,7 @@ import com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO;
import com.wb.domainserver.domain.gcone.goods.goodsinfo.mapper.BOGoodsinfoMapper;
import com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO;
import lombok.Data;
import org.apache.commons.text.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -984,4 +985,43 @@ public class BOMaSopmalService {
return mapper.selectSopmalList();
}
/**
* 사이트맵 XML
* @param sopmalCd
* @return
*/
@Transactional
public String selectSitemapXml(String sopmalCd) {
List<DataMap> resultList = new ArrayList<>();
StringBuilder xml = new StringBuilder();
try {
xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
xml.append("<?xml-stylesheet type=\"text/css\" href=\"https://www.xml-sitemaps.com/css/sitemap.css\"?>");
xml.append("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\">\n");
resultList = mapper.selectSitemapXml(sopmalCd);
for (DataMap data : resultList) {
xml.append(" <url>");
xml.append(" <loc>")
.append(StringEscapeUtils.escapeXml11(String.valueOf(data.get("targetUrl"))))
.append("</loc>");
xml.append(" <lastmod>")
.append(StringEscapeUtils.escapeXml11(String.valueOf(data.get("lastModified"))))
.append("</lastmod>");
xml.append(" <priority>")
.append(StringEscapeUtils.escapeXml11(String.valueOf(data.get("priority"))))
.append("</priority>");
xml.append(" </url>");
}
xml.append("</urlset>");
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return xml.toString();
}
}

View File

@@ -305,6 +305,14 @@ public class GoodsController {
public String selectGoodsListForm(HttpServletRequest request,
BOGoodsVO vo,
ModelMap model) {
String mobileParentCtgryId = request.getParameter("mobileParentCtgryId");
String mobileCurrentCtgryId = request.getParameter("mobileCurrentCtgryId");
boolean mobileSubCategorySelected = mobileParentCtgryId != null && !mobileParentCtgryId.isBlank()
&& mobileCurrentCtgryId != null && !mobileCurrentCtgryId.isBlank();
if (mobileSubCategorySelected) {
vo.setCtgryId(mobileParentCtgryId);
}
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
@@ -322,7 +330,7 @@ public class GoodsController {
//검색한 카테고리 정보로 vo 세팅
if(!CollectionUtils.isEmpty(goodsCategoryList)){
vo.setUpperCtgryId(goodsCategoryList.get(0).get("baseCtgryId").toString());
vo.setCtgryId(goodsCategoryList.get(0).get("baseCtgryId").toString());
vo.setCtgryId(mobileSubCategorySelected ? mobileCurrentCtgryId : goodsCategoryList.get(0).get("baseCtgryId").toString());
}else{
vo.setUpperCtgryId("0");
vo.setCtgryId("0");

View File

@@ -198,6 +198,20 @@ public class MainController {
}
/**
* 사이트맵 XML
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sitemap", produces = MediaType.APPLICATION_XML_VALUE)
public ResponseEntity<String> selectSitemapXml() {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
String xml = boMaSopmalService.selectSitemapXml(user.getSopmalCd());
return ResponseEntity.ok().contentType(MediaType.APPLICATION_XML).body(xml);
}
/**
* 비회원 휴대폰번호 확인
* @return OrdrDtlR.jsp

View File

@@ -1569,5 +1569,124 @@
AND GD.USE_AT = 'Y'
</select>
<!-- 사이트맵 XML -->
<select id="selectSitemapXml"
parameterType="String"
resultType="dataMap">
WITH RECURSIVE CATEGORY_TREE AS (
SELECT
GC.CTGRY_ID
, GC.UPPER_CTGRY_ID
, GC.SOPMAL_CD
, GC.CTGRY_NM
, GC.CTGRY_DEPTH
, GC.SORT_ORDR
, GC.CTGRY_DV_CD
, GC.EXPSR_CD
, GC.URL_DV_CD
, CASE
WHEN GC.URL_DV_CD = '01' THEN ''
WHEN GC.URL_DV_CD = '02' THEN GC.URL
ELSE NULL
END URL
, GC.USE_AT
, GC.EXPSR_BGN_DT
, GC.EXPSR_END_DT
FROM GC_CATEGORY GC
WHERE GC.SOPMAL_CD = #{sopmalCd}
AND GC.UPPER_CTGRY_ID IS NULL
AND GC.USE_AT = 'Y'
AND (
GC.EXPSR_CD = '01'
OR (
GC.EXPSR_CD = '03'
AND SYSDATE() BETWEEN GC.EXPSR_BGN_DT AND GC.EXPSR_END_DT
)
)
UNION ALL
SELECT
CHILD.CTGRY_ID
, CHILD.UPPER_CTGRY_ID
, CHILD.SOPMAL_CD
, CHILD.CTGRY_NM
, CHILD.CTGRY_DEPTH
, CHILD.SORT_ORDR
, CHILD.CTGRY_DV_CD
, CHILD.EXPSR_CD
, CHILD.URL_DV_CD
, CASE
WHEN CHILD.URL_DV_CD = '01' THEN
CASE
WHEN CHILD.CTGRY_DV_CD = '01' THEN CONCAT('/sopmal/goods/selectGoodsListForm?ctgryId=', CHILD.CTGRY_ID)
ELSE NULL
END
WHEN CHILD.URL_DV_CD = '02' THEN CHILD.URL
ELSE NULL
END URL
, CHILD.USE_AT
, CHILD.EXPSR_BGN_DT
, CHILD.EXPSR_END_DT
FROM GC_CATEGORY CHILD
INNER JOIN CATEGORY_TREE PARENT
ON CHILD.SOPMAL_CD = PARENT.SOPMAL_CD
AND CHILD.UPPER_CTGRY_ID = PARENT.CTGRY_ID
WHERE CHILD.USE_AT = 'Y'
AND (
CHILD.EXPSR_CD = '01'
OR (
CHILD.EXPSR_CD = '03'
AND SYSDATE() BETWEEN CHILD.EXPSR_BGN_DT AND CHILD.EXPSR_END_DT
)
)
)
SELECT CONCAT(GS.PC_DOMN_ADRES, GC.URL) AS TARGET_URL
, DATE_FORMAT(SYSDATE(), '%Y-%m-%dT%H:%i:%s+09:00') AS LAST_MODIFIED
, ROUND(POWER(0.8, GC.CTGRY_DEPTH - 1), 4) AS PRIORITY
FROM CATEGORY_TREE GC
INNER JOIN GC_SHOP GS
ON GC.SOPMAL_CD = GS.SOPMAL_CD
WHERE GC.CTGRY_DV_CD != '02'
AND GC.CTGRY_DEPTH != 2
UNION
SELECT CONCAT(GS.PC_DOMN_ADRES, '/sopmal/goods/selectGoodsDtl?goodsInnb=', GG.GOODS_INNB) AS TARGET_URL
, DATE_FORMAT(GG.UPDT_DT, '%Y-%m-%dT%H:%i:%s+09:00') AS LAST_MODIFIED
, ROUND(POWER(0.8, 1), 4) AS PRIORITY
FROM GC_GOODS GG
INNER JOIN GC_SHOP GS
ON GG.SOPMAL_CD = GS.SOPMAL_CD
WHERE GG.USE_AT = 'Y'
AND GG.SOPMAL_CD = #{sopmalCd}
AND GG.GOODS_KND_CD = '01'
AND GG.EXPSR_DV_CD = '01'
AND GG.GOODS_STTUS_CD IN ('01', '02')
UNION
SELECT CONCAT(GS.PC_DOMN_ADRES, '/sopmal/csc/selectBbscttAuth?authDv=CM&amp;bbsTyCd=',
CASE
WHEN GB.BBS_ID = 'sake_column' THEN '01'
WHEN GB.BBS_ID = 'magazine' THEN '09'
ELSE NULL
END,
'&amp;bbscttInnb=', GB.BBSCTT_INNB,
'&amp;reqUrl=subPage&amp;bbsId=', GB.BBS_ID,
'&amp;cscAt='
) AS TARGET_URL
, DATE_FORMAT(GB.UPDT_DT, '%Y-%m-%dT%H:%i:%s+09:00') AS LAST_MODIFIED
, ROUND(POWER(0.8, 1), 4) AS PRIORITY
FROM GC_BOARDDATA GB
INNER JOIN GC_SHOP GS
ON GB.SOPMAL_CD = GS.SOPMAL_CD
WHERE GB.USE_AT = 'Y'
AND GB.EXPSR_AT = 'Y'
AND (
GB.NTCE_PD_SETUP_AT = 'N'
OR (
GB.NTCE_PD_SETUP_AT = 'Y'
AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN DATE_FORMAT(GB.NTCE_BGN_DE, '%Y-%m-%d') AND DATE_FORMAT(GB.NTCE_END_DE, '%Y-%m-%d')
)
)
AND GB.BBS_ID IN ('sake_column', 'magazine')
AND depth = 0
ORDER BY PRIORITY DESC
</select>
</mapper>

View File

@@ -4269,6 +4269,9 @@ body {
.header--sub:has(.headerTab) ~ .content-wrap {
padding-top: 96px;
}
.header--sub:has(.mobile-about-menu) ~ .content-wrap {
padding-top: 96px;
}
.header--sub::before {
content: "";
position: absolute;
@@ -14751,4 +14754,4 @@ body {
margin-bottom: 20px;
padding: 14px 28px;
background-color: #ffffff;
}/*# sourceMappingURL=default.css.map */
}/*# sourceMappingURL=default.css.map */

View File

@@ -35,10 +35,32 @@
</div>
</div>
</div>
<c:if test="${param.mobileAboutMenuAt eq 'Y' && not empty param.mobileParentCtgryId}">
<c:set var="mobileAboutCurrentCtgryId" value="${param.mobileCurrentCtgryId}"/>
<nav class="home-category mobile-about-menu" aria-label="하위 메뉴">
<div class="home-category__content">
<ul class="home-category__list">
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}">
<c:if test="${topMenuList.ctgryDvCd eq '01' && topMenuList.rnum eq '3' && topMenuList.upperCtgryId eq param.mobileParentCtgryId && topMenuList.menuExpsrAt eq 'Y'}">
<c:if test="${empty mobileAboutCurrentCtgryId}">
<c:set var="mobileAboutCurrentCtgryId" value="${topMenuList.ctgryId}"/>
</c:if>
<li class="home-category__item<c:if test="${topMenuList.ctgryId eq mobileAboutCurrentCtgryId}"> active</c:if>">
<a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${param.mobileParentCtgryId}"/>&amp;mobileAboutMenuAt=Y&amp;mobileCurrentCtgryId=<c:out value="${topMenuList.ctgryId}"/>"
class="home-category__link">
<c:out value="${topMenuList.ctgryNm}"/>
</a>
</li>
</c:if>
</c:forEach>
</ul>
</div>
</nav>
</c:if>
</div>
<script>
//뒤로가기 이벤트 부여, 각 페이지 마다 이벤트 삭제 후 다른 이벤트 사용 가능
$(".header__toBack__btn").on("click",function (){
fn_go_back();
});
</script>
</script>

View File

@@ -1070,10 +1070,11 @@
<c:if test="${topMenuList.gnbExpsrAt eq 'Y'}">
<c:if test="${topMenuList.rnum eq '2'}">
<c:set var="mDpth3Chk" value="N"/>
<c:set var="mobileAboutParentAt" value="${topMenuList.ctgryNm eq 'ABOUT'}"/>
<li class="isSub list">
<div class="isSubDv">
<a href="<c:out value="${topMenuList.url}"/>" class="depth"><c:out value ="${topMenuList.ctgryNm}"/><em class="visually-hidden">상세내용닫기</em></a>
<a href="<c:out value="${topMenuList.url}"/>" class="moer"></a>
<a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${topMenuList.ctgryId}"/><c:if test="${topMenuList.ctgryNm eq 'ABOUT'}">&amp;mobileAboutMenuAt=Y</c:if>" class="depth"><c:out value ="${topMenuList.ctgryNm}"/><em class="visually-hidden">상세내용닫기</em></a>
<a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${topMenuList.ctgryId}"/><c:if test="${topMenuList.ctgryNm eq 'ABOUT'}">&amp;mobileAboutMenuAt=Y</c:if>" class="moer"></a>
</div>
</c:if>
<c:if test="${topMenuList.rnum eq '3'}">
@@ -1082,7 +1083,7 @@
<c:set var="mDpth3Chk" value="Y"/>
<ul class="view">
</c:if>
<li><a href='<c:out value="${topMenuList.url}"/>'><c:out value ="${topMenuList.ctgryNm}"/></a></li>
<li><a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${topMenuList.upperCtgryId}"/>&amp;mobileCurrentCtgryId=<c:out value="${topMenuList.ctgryId}"/><c:if test="${mobileAboutParentAt}">&amp;mobileAboutMenuAt=Y</c:if>"><c:out value ="${topMenuList.ctgryNm}"/></a></li>
</c:if>
<c:if test="${topMenuList.rnum < 4}">
<c:set var="chkUpperMenuCd" value="${topMenuList.upperCtgryId}"/>

View File

@@ -66,7 +66,7 @@
<c:if test="${topMenuList.ctgryDvCd eq '01' && topMenuList.menuExpsrAt eq 'Y'}">
<c:if test="${topMenuList.rnum eq '2'}">
<li class="home-category__item">
<a href="<c:out value="${topMenuList.url}"/>" onclick="setTopMenuCode()" <c:if test="${not empty topMenuList.menuChrColor}"> style="color:${topMenuList.menuChrColor};"</c:if>><c:out value ="${topMenuList.ctgryNm}"/></a>
<a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${topMenuList.ctgryId}"/><c:if test="${topMenuList.ctgryNm eq 'ABOUT'}">&amp;mobileAboutMenuAt=Y</c:if>" onclick="setTopMenuCode()" <c:if test="${not empty topMenuList.menuChrColor}"> style="color:${topMenuList.menuChrColor};"</c:if>><c:out value ="${topMenuList.ctgryNm}"/></a>
</li>
</c:if>
</c:if>
@@ -90,4 +90,4 @@
$(".top-banner__close").click(function () {
$(".top-banner").remove();
});
</script>
</script>

View File

@@ -133,6 +133,17 @@
});
}
/* ********************************************************
* xml 임시
******************************************************** */
const fn_update_xml = function () {
const url = '<c:url value="/mngr/goods/goodsmngr/selectGoodsRegistForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
/* ********************************************************
* 등록폼 이동
******************************************************** */
@@ -441,6 +452,7 @@
<div class="page-title">
<h2 class="page-title__title">상품 목록</h2>
<div class="page-title__btn-container">
<button onclick="fn_update_xml()" class="btn primary">XML 업데이트(임시)</button>
<button onclick="fn_move_regpage()" class="btn primary">상품 <spring:message code="button.insert"/></button>
</div>
</div>

View File

@@ -27,9 +27,15 @@
history.scrollRestoration = 'manual';
}
$(window).scrollTop(0);
/*헤더에 타이틀 set*/
const title = '<c:out value="${resultMap.bbsInfo.bbsNm}"/>';
fn_set_header_title(title);
/* ABOUT 하위 화면은 게시판명이 아닌 대메뉴명을 표시 */
<c:choose>
<c:when test="${param.mobileAboutMenuAt eq 'Y'}">
fn_set_header_title('ABOUT');
</c:when>
<c:otherwise>
fn_set_header_title('<c:out value="${resultMap.bbsInfo.bbsNm}"/>');
</c:otherwise>
</c:choose>
fn_select_cn();
// data-micromodal-trigger 속성을 가진 버튼을 클릭하면 해당 ID의 모달이 열림
// 모달 배경화면 스크롤 방지
@@ -1253,6 +1259,7 @@
<i class="icon icon_lock"></i>
</c:if>
</h4>
<c:if test="${param.mobileAboutMenuAt ne 'Y'}">
<ul class="eventDetail__list">
<c:if test="${bbsInfo.registDtYn eq 'Y'}">
<li><c:out value="${bbscttInfo.sumRegistDt}"/></li>
@@ -1294,6 +1301,7 @@
</c:choose>
</li>
</ul>
</c:if>
</div>
<%-------------------------------%>
<%--첨부 파일 다운로드 영역--%>
@@ -1753,6 +1761,9 @@
</div>
</div>
<form id="hiddenForm">
<input type="hidden" name="mobileParentCtgryId" value="<c:out value="${param.mobileParentCtgryId}"/>"/>
<input type="hidden" name="mobileAboutMenuAt" value="<c:out value="${param.mobileAboutMenuAt}"/>"/>
<input type="hidden" name="mobileCurrentCtgryId" value="<c:out value="${param.mobileCurrentCtgryId}"/>"/>
<%--목록 관련--%>
<input type="hidden" name="pageIndex" value="<c:out value="${bbscttVO.pageIndex}"/>"/>
<input type="hidden" name="bbsTyCd" value="<c:out value="${bbscttVO.bbsTyCd}"/>"/>

View File

@@ -314,6 +314,9 @@
</div>
</form>
<form id = "dtlForm" action="/sopmal/csc/selectBbscttDtlInqire" method="get">
<input type="hidden" name="mobileParentCtgryId" value="<c:out value="${param.mobileParentCtgryId}"/>"/>
<input type="hidden" name="mobileAboutMenuAt" value="<c:out value="${param.mobileAboutMenuAt}"/>"/>
<input type="hidden" name="mobileCurrentCtgryId" value="<c:out value="${param.mobileCurrentCtgryId}"/>"/>
<input type="hidden" name="bbscttInnb" id="bbscttInnb"><%--게시글 고유번호--%>
<input type="hidden" name="bbsId" value="<c:out value = "${bbsInfo.bbsId}"/>"/><%--게시판아이디--%>
<input type="hidden" name="bbsTyCd" value="<c:out value = "${bbsInfo.bbsTyCd}"/>"/><%--게시판타입--%>
@@ -429,4 +432,4 @@
</div>
</div>
</div>
</html>
</html>

View File

@@ -39,9 +39,15 @@
awaitCloseAnimation: true,
});
/*헤더에 타이틀 set*/
const title = '<c:out value="${resultMap.bbsInfo.bbsNm}"/>';/*게시판이름*/
fn_set_header_title(title);
/* ABOUT 하위 화면은 게시판명이 아닌 대메뉴명을 표시 */
<c:choose>
<c:when test="${param.mobileAboutMenuAt eq 'Y'}">
fn_set_header_title('ABOUT');
</c:when>
<c:otherwise>
fn_set_header_title('<c:out value="${resultMap.bbsInfo.bbsNm}"/>');
</c:otherwise>
</c:choose>
/*box_tab 클릭 이벤트*/
$(".headerTab__item").on("click", function () {
@@ -347,6 +353,11 @@
fn_create_input("reqUrl","subPage", form);
fn_create_input("bbsId", $("#bbsId").val(), form);
fn_create_input("cscAt", $("#cscAt").val(), form);
<c:if test="${param.mobileAboutMenuAt eq 'Y'}">
fn_create_input("mobileParentCtgryId", '<c:out value="${param.mobileParentCtgryId}"/>', form);
fn_create_input("mobileAboutMenuAt", 'Y', form);
fn_create_input("mobileCurrentCtgryId", '<c:out value="${param.mobileCurrentCtgryId}"/>', form);
</c:if>
/*let pageUnit = '';
//페이지 유닛 계산
const pgeVtcCnt = $("#pgeVtcCnt").val();//ROW

View File

@@ -29,6 +29,16 @@
const title = '상품 목록';
fn_set_header_title(title);
const $categoryList = $('.header--sub > .home-category .home-category__list');
const $activeCategory = $categoryList.find('.home-category__item.active');
if ($activeCategory.length) {
const listElement = $categoryList.get(0);
const activeRect = $activeCategory.get(0).getBoundingClientRect();
const listRect = listElement.getBoundingClientRect();
const activeCenter = activeRect.left - listRect.left + listElement.scrollLeft + (activeRect.width / 2);
$categoryList.scrollLeft(Math.max(0, activeCenter - (listElement.clientWidth / 2)));
}
let pageIndex = '<c:out value="${ resultMap.BOGoodsVO.pageIndex }"/>';
fn_select_list(pageIndex);
@@ -1116,12 +1126,12 @@
<nav class="home-category">
<div class="home-category__content">
<ul class="home-category__list">
<li class="home-category__item active">
<li class="home-category__item<c:if test="${resultMap.BOGoodsVO.ctgryId eq resultMap.BOGoodsVO.upperCtgryId}"> active</c:if>">
<a href="javascript:void(0);" data-text="${resultMap.goodsCategoryList[0].baseCtgryNm}" data-value="${resultMap.goodsCategoryList[0].baseCtgryId}">전체</a>
</li>
<c:forEach items="${resultMap.goodsCategoryList}" var="goodsCategory" varStatus="status">
<c:if test="${goodsCategory.ctgryId ne resultMap.BOGoodsVO.ctgryId}">
<li class="home-category__item ">
<c:if test="${goodsCategory.upperCtgryId eq resultMap.BOGoodsVO.upperCtgryId}">
<li class="home-category__item<c:if test="${goodsCategory.ctgryId eq resultMap.BOGoodsVO.ctgryId}"> active</c:if>">
<a href="javascript:void(0);" data-value="${goodsCategory.ctgryId}"> ${goodsCategory.ctgryNm}</a>
</li>
</c:if>
@@ -1260,4 +1270,4 @@
</div>
</div>
</html>
</html>