revert(cafe24): 상단 공통 홍보 숨기기 기능 제거

사용자 결정에 따라 없던 기능으로 되돌린다. 카페24 API 로 스킨 detail.html 의
상품번호 목록을 고칠 수 없다는 것이 확인된 뒤, 대안(상세설명 CSS 주입 / 스크립트
태그)을 모두 채택하지 않기로 정리했다.

제거 대상:
  store.py        HIDE_PROMO_* 상수, has_hidden_promo, set_promo_hidden
  routes_products 편집기 컨텍스트의 promo 상태, hide_promo 폼 필드,
                  적용 시 블록 주입, 분리 상품 모바일 블록 동기화, 감사로그 표기
  _editor.html    「상단 공통 홍보 숨기기」 체크박스
  cafe24.css      .cf24-check-inline
  tests           promo 관련 4건
  docs            2-3 절

적용 시 "변경 없음" 판정에 모바일 비교를 포함시킨 것은 남겼다. 공통 홍보와 무관하게
맞는 동작이다(PC 는 그대로여도 모바일이 PC 와 다르면 맞춰줘야 한다).

문서 정리도 함께 했다. 앞선 편집에서 3-1·2-2 절이 중복 삽입되고 절 순서가
뒤섞여 있던 것을 2 → 2-1 → 2-2 → 3 → 3-1 → 3-2 로 바로잡았다. 편집기 절에는
아직 이전 방식(크기 맞추기·sticky 줄번호)이 적혀 있었는데 실제 구현인 스크롤
동기화로 갱신하고, 크기 계산이 두 번 실패한 이유를 근거 수치와 함께 남겼다.

⚠️ 이미 이 기능으로 적용한 상품이 있다면 그 상품 상세설명에
   <style id="cf24-hide-common-promo"> 블록이 남아 있다. 편집기에서 그 줄을 지우고
   적용하면 된다.

검증: 유닛테스트 45개 통과, 라우트 10개 등록, 템플릿 컴파일 확인.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 14:03:10 +09:00
parent e96c0636f5
commit 25ed369583
7 changed files with 76 additions and 236 deletions
-41
View File
@@ -368,47 +368,6 @@ def _collapse_short_blocks(lines: list[str]) -> list[str]:
return out
# ════════════════════════════════════════════════════════════
# 상단 공통 홍보 숨기기
#
# 스킨(detail.html)에는 공통 홍보를 지울 상품번호 목록이 박혀 있다.
# const numbers = [12,31,32, ...]; // .edb-img-tag-w 를 remove()
# 그런데 카페24 Admin API 는 **스킨 파일을 읽거나 쓸 수 없다**(테마는 조회만).
# 그래서 같은 결과를 상품 상세설명 안의 CSS 로 낸다 — 상세설명은 우리가 쓸 수 있고,
# 상품별로 켜고 끌 수 있으며, 상태가 그 상품 소스에 그대로 보인다.
#
# id 를 붙여 우리가 넣은 블록임을 표시한다. 사람이 쓴 <style> 은 건드리지 않는다.
# ════════════════════════════════════════════════════════════
HIDE_PROMO_ID = "cf24-hide-common-promo"
HIDE_PROMO_BLOCK = (
f'<style id="{HIDE_PROMO_ID}">/* DBX ERP: 상단 공통 홍보 숨김 */\n'
".edb-img-tag-w{display:none !important}\n"
"</style>"
)
_HIDE_PROMO_RE = re.compile(
r"[ \t]*<style[^>]*\bid\s*=\s*[\"']%s[\"'][^>]*>.*?</style>\s*" % re.escape(HIDE_PROMO_ID),
re.IGNORECASE | re.DOTALL,
)
def has_hidden_promo(html: str) -> bool:
"""이 상품의 상세설명에 공통 홍보 숨김 블록이 들어 있는가."""
return bool(_HIDE_PROMO_RE.search(html or ""))
def set_promo_hidden(html: str, hidden: bool) -> str:
"""숨김 블록을 넣거나 뺀다. 여러 번 호출해도 결과가 같다(멱등).
넣을 때는 맨 앞에 둔다 — 찾기 쉽고, 상세설명 어디에 있어도 CSS 효과는 같다.
"""
stripped = _HIDE_PROMO_RE.sub("", html or "")
if not hidden:
return stripped
if not stripped.strip():
return HIDE_PROMO_BLOCK
return HIDE_PROMO_BLOCK + "\n" + stripped.lstrip("\n")
def fingerprint(html: str) -> str:
"""편집 시작 시점의 카페24 값 지문. 적용 직전 값과 비교해 충돌을 잡는다.