저장소가 총 건수를 상한까지만 세게 되면서 마지막 페이지 번호가 없는 목록이 생겼는데, 화면은 그 값을 1 로 접거나 페이저 노출 조건으로만 쓰고 있었다. 앞은 "1페이지뿐" 으로 잘못 말하고 뒤는 페이저를 통째로 지워 뒤쪽 페이지로 갈 방법 자체를 없앤다. 둘 다 예외도 404 도 내지 않아 화면은 정상으로 보이고 기능만 없다. Pagination 컴포넌트가 세 형태를 모두 이해하도록 넓혔다. 마지막 페이지를 알면 페이지 산술이 우선이고, 모를 때만 다음 페이지 존재 여부로 판정한다. 처음·마지막 버튼을 따로 켜고 끌 수 있게 나눠, 마지막 페이지를 모르는 목록에서는 그 버튼만 감춰지고 나머지 이동은 그대로 열려 있다. DataGrid 는 페이저를 그리는 두 경로 모두에 그 값을 전달한다 — 한쪽만 전달하면 그 화면만 첫 페이지에 갇힌다. 마이페이지 주문·마일리지·위시리스트·알림함, 게시판 목록, 상품 리뷰·문의, 내가 쓴 글, 관리자 설정 탭과 스케줄 이력의 소비 지점을 전건 옮겼다. 검색 화면은 총 건수를 정확히 세지 못한 경우 "N건 이상" 으로 표기하고 검색어를 좁히면 정확한 건수를 볼 수 있다고 안내한다. 탭 배지도 세지 못한 값을 정확한 숫자처럼 보여주지 않는다. 최신순은 첫 페이지부터 커서로 이동하며, 주소로 특정 페이지를 지목한 딥링크는 종전 동작을 유지한다. 쇼핑 첫 화면과 분류 화면을 단일 요청으로 재배선하고, 섹션 partial 이 부모가 선언한 이름을 읽도록 통일했다. 데이터소스 이름에 직결돼 있으면 다른 화면이 재사용할 때 폴백에 걸려 예외도 로그도 없이 섹션이 사라진다. 상품 상세의 "최근 본 상품" 이 계속 비어 있던 것은 존재하지 않는 라우트 파라미터를 읽고 있어서였다. 게시판 목록 세 스킨의 블라인드 아이콘 대비와 이미지 위 공통 색의 다크 모드 표기를 정리했다.
150 lines
3.6 KiB
JSON
150 lines
3.6 KiB
JSON
{
|
|
"identifier": "sirsoft-basic",
|
|
"vendor": "sirsoft",
|
|
"name": {
|
|
"ko": "Basic",
|
|
"en": "Basic"
|
|
},
|
|
"version": "1.0.4",
|
|
"license": "MIT",
|
|
"description": {
|
|
"ko": "그누보드7 기본 사용자 템플릿",
|
|
"en": "Gnuboard7 default user template"
|
|
},
|
|
"type": "user",
|
|
"locales": [
|
|
"ko",
|
|
"en"
|
|
],
|
|
"author": {
|
|
"name": "sirsoft",
|
|
"email": "contact@sirsoft.com",
|
|
"url": "https://sirsoft.com"
|
|
},
|
|
"release_date": "2026-01-07",
|
|
"g7_version": ">=7.0.6",
|
|
"dependencies": {
|
|
"modules": {
|
|
"sirsoft-board": ">=1.0.0",
|
|
"sirsoft-ecommerce": ">=1.0.5",
|
|
"sirsoft-page": ">=1.0.0"
|
|
},
|
|
"plugins": {
|
|
"sirsoft-daum_postcode": ">=1.0.0"
|
|
}
|
|
},
|
|
"assets": {
|
|
"css": [
|
|
"dist/css/components.css"
|
|
],
|
|
"js": [
|
|
"dist/js/components.iife.js"
|
|
],
|
|
"fonts": [],
|
|
"images": []
|
|
},
|
|
"components": {
|
|
"basic": [
|
|
"a",
|
|
"button",
|
|
"checkbox",
|
|
"div",
|
|
"form",
|
|
"h1",
|
|
"h2",
|
|
"h3",
|
|
"h4",
|
|
"hr",
|
|
"icon",
|
|
"img",
|
|
"input",
|
|
"label",
|
|
"li",
|
|
"nav",
|
|
"p",
|
|
"section",
|
|
"select",
|
|
"span",
|
|
"svg",
|
|
"table",
|
|
"tbody",
|
|
"td",
|
|
"textarea",
|
|
"th",
|
|
"thead",
|
|
"tr",
|
|
"ul"
|
|
],
|
|
"composite": [
|
|
"header",
|
|
"footer",
|
|
"mobile-nav",
|
|
"product-card",
|
|
"rich-text-editor",
|
|
"image-gallery",
|
|
"quantity-selector",
|
|
"post-reactions",
|
|
"social-login-buttons",
|
|
"file-uploader",
|
|
"card",
|
|
"modal",
|
|
"toast",
|
|
"pagination",
|
|
"stat-card",
|
|
"status-badge",
|
|
"tab-navigation",
|
|
"empty-state",
|
|
"loading-spinner",
|
|
"breadcrumb",
|
|
"search-bar",
|
|
"dropdown"
|
|
],
|
|
"layout": [
|
|
"container",
|
|
"flex",
|
|
"grid",
|
|
"section"
|
|
]
|
|
},
|
|
"preview": {
|
|
"thumbnail": "preview/thumbnail.png",
|
|
"screenshots": [
|
|
"preview/screenshot1.png",
|
|
"preview/screenshot2.png"
|
|
]
|
|
},
|
|
"error_config": {
|
|
"layouts": {
|
|
"401": "errors/401",
|
|
"403": "errors/403",
|
|
"404": "errors/404",
|
|
"500": "errors/500",
|
|
"503": "errors/503",
|
|
"maintenance": "errors/maintenance"
|
|
}
|
|
},
|
|
"features": {
|
|
"dark_mode": true,
|
|
"responsive": true,
|
|
"multi_language": true,
|
|
"multi_currency": true
|
|
},
|
|
"github_url": "https://github.com/gnuboard/g7-template-sirsoft-basic",
|
|
"github_changelog_url": "https://github.com/gnuboard/g7-template-sirsoft-basic/blob/main/CHANGELOG.md",
|
|
"externals": [
|
|
{
|
|
"id": "fontawesome",
|
|
"type": "style",
|
|
"url": "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css",
|
|
"preconnect": "https://cdnjs.cloudflare.com"
|
|
},
|
|
{
|
|
"id": "pretendard",
|
|
"type": "webfont",
|
|
"url": "https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css",
|
|
"preconnect": "https://cdn.jsdelivr.net",
|
|
"crossorigin": "anonymous"
|
|
}
|
|
]
|
|
}
|