Skip to main content
Custom code 블록은 직접 만든 HTML 또는 React를 장바구니에 추가해요. 드로어의 어느 섹션에나 배치하거나, Cart items 안에 하위 블록으로 중첩해 각 라인마다 반복되도록 할 수 있어요. 다른 블록과 달리 Content 설정과 Design 섹션이 없어요: 블록 자체가 코드이므로 Code 탭에서만 작업해요.
Aftersell Cart 에디터에서 Custom code 블록을 추가하고 켜는 애니메이션 미리보기

Custom code 블록 추가 및 켜기

  1. Custom code 블록을 아무 섹션에나 추가하거나, Cart items 아래 하위 블록으로 추가하세요.
  2. 블록을 선택하고 Code 탭을 여세요.
  3. HTML 또는 React component를 선택하세요. 새 블록의 기본값은 HTML이에요.
  4. 코드를 작성하세요.
  5. React를 선택했다면 Compile을 클릭하세요.
  6. **“Use custom template”**을 켜세요. 이 블록에서 이 스위치는 “내 커스텀 코드를 표시”를 의미하며, 기본적으로 꺼져 있으므로 활성화하기 전까지 아무것도 렌더링되지 않아요.
  7. 블록이 구매자에게 계속 표시되도록 사이드바 눈 모양 토글을 켜 두세요.
블록이 표시되려면 눈 모양 토글과 **“Use custom template”**이 모두 켜져 있어야 해요.

동작 방식

  • 블록은 장바구니가 로드될 때까지 아무것도 렌더링하지 않아요.
  • 사이드바 눈이 꺼져 있거나, **“Use custom template”**이 꺼져 있거나, 코드가 비어 있거나, React 컴파일 또는 렌더링이 실패해도 아무것도 렌더링하지 않아요. 실패가 조용히 처리되므로 게시하기 전에 미리보기에서 블록을 확인하세요.

HTML 모드

HTML 모드는 소수의 토큰을 마크업에 치환해요. 정적이거나 토큰 기반 콘텐츠를 위한 것이지, 로직 실행을 위한 것이 아니에요.
  • 인라인 <script> 태그는 실행되지 않으며, HTML 모드는 SDK나 window에 접근할 수 없어요.
  • 로직이 필요하면 React 모드Cart SDK를 활용한 커스텀 스크립트를 사용하세요.

토큰

토큰 값은 마크업에 바로 넣을 수 있는 포맷된 문자열(스토어 통화 형식, %가 포함된 백분율, 또는 수량)이에요:

예시

React 모드

React 모드는 컴포넌트를 컴파일하고 장바구니 데이터와 add-to-cart 액션을 전달해요.
  • 에디터는 래퍼를 function CustomCode(props: CustomCodeProps) { … }로 고정하며, 그 사이의 본문만 편집할 수 있어요.
  • 블록이 표시되려면 Compile을 클릭한 다음 **“Use custom template”**을 켜야 해요.
  • 컴포넌트에서 useState, useEffect, useMemo, useRef, useCallback을 사용할 수 있어요.
  • HTML 모드와 달리 React는 페이지 컨텍스트에서 실행되므로, 사용 가능한 경우 windowCart SDK를 호출할 수 있어요.
  • 컴포넌트가 런타임에 오류를 발생시키면 블록은 아무것도 렌더링하지 않고 장바구니의 나머지 부분은 계속 작동해요.

Props

총액과 절약 금액은 통화의 최소 단위(USD의 경우 센트)로 된 정수예요. 즉 $12.5012.50이 아니라 1250이에요. HTML 토큰과 달리 포맷된 금액 문자열이 아니에요.

cart와 line의 구조

cartline은 SDK가 다른 모든 곳에서 노출하는 것과 동일한 객체이므로, **장바구니 객체 레퍼런스**에 한 번만 문서화되어 있어요: 장바구니, 라인, 번들의 모든 필드예요. 가장 자주 사용하게 될 것들: cart.items, cart.itemCount, cart.totalPrice, line.title, line.quantity, line.finalLinePrice. 이 블록에 특화된 세 가지:
  • line은 Cart items 하위 블록에서만 설정되며, 이때 컴포넌트가 라인마다 한 번 렌더링돼요. 섹션에 배치되면 linenull이고 대신 cart.items를 읽으세요.
  • 번들 자식은 cart.items에 없어요. 라인이 번들로 그룹화되면 앵커 라인만 나타나고, 자식은 line.bundle.children에 있어요.
  • 라인 변환으로 숨겨진 라인도 거기에 없지만, 여전히 cart.totalPrice에는 포함돼요.

예시

아이템 수 표시:
Cart items 하위 블록으로 사용할 때는 상품별 콘텐츠에 props.line을 사용하세요. 블록은 라인마다 한 번 렌더링되며, 해당 라인의 상품과 옵션 정보가 태그돼요:

보강(enrichment) 메타데이터 읽기

cart.items의 각 아이템에는 metadata 필드가 있어요: 카트 인리처(cart enricher)가 채우기 전까지는 빈 객체 {}예요. 채워지면 인리처의 id를 키로 하며, 해당 라인의 상품 또는 옵션에 대한 Storefront 데이터를 담아요:
metadata는 항상 존재하며, 인리처의 비동기 가져오기가 완료되기 전까지 기본값은 빈 객체 {}예요(“아직 보강되지 않음” 테스트는 Object.keys(item.metadata).length === 0이에요). 특정 인리처의 키를 읽을 때는 옵셔널 체이닝(item.metadata?.enricherId)을 사용하세요. 보강이 완료되기 전까지 그 키는 존재하지 않으니까요.

할인 코드와 라인 할인 읽기

cart.discountCodes는 장바구니에 적용된 할인 코드를 나열하고, 각 라인의 discountAllocations는 해당 라인에 적용된 할인을 나열해요:

배치 및 제한

  • 영역: 모든 위치(상단, 본문, 하단). Cart items 하위 블록으로도 사용할 수 있어요.
  • 최대 개수: 무제한.
  • 상태: 채워진 장바구니와 빈 장바구니(섹션 블록일 때). Cart items 하위 블록일 때는 장바구니에 라인이 있을 때만 렌더링되며, 라인마다 하나의 인스턴스가 렌더링돼요.
  • 잠겨 있지 않으므로 제거하거나 숨길 수 있어요.
  • 블록별 Design 섹션이 없어요. 직접 만든 마크업, 커스텀 CSS, 전역 디자인 설정으로 스타일을 지정하세요.

커스텀 코드 블록 vs. 커스텀 템플릿 vs. 커스텀 스크립트, 언제 무엇을 쓸까요