window.aftersell.cart.hooks 아래에 있어요.
훅은 쇼핑객이 보는 것을 변경하고, 액션은 장바구니에 담긴 것을 변경해요. 변환으로 무료 선물 라인을 숨기면 장바구니와 합계에는 그대로 남아요.
removeItem으로 제거하면 실제로 빠져요.훅은 설정용 호출이므로 스크립트 맨 위에서 등록해도 안전하며,
ready()를 기다릴 필요가 없어요. 장바구니의 Initialization 스크립트에서 등록하세요(커스텀 스크립트 참고).등록 작동 방식
register* 메서드예요. 함수를 전달해 호출하면 여러분의 함수를 제거할 수 있는 등록 해제 함수를 반환해요.
예외를 던지거나 함수가 아닌 훅은 건너뛰고, 나머지는 계속 실행되며 장바구니는 계속 작동해요. 하나의 깨진 통합이 장바구니 담기, 구독 선택기, 정렬을 망가뜨릴 수 없어요.
반대로 여러분의 깨진 훅은 조용히 실패해요: 브라우저 콘솔에 아무것도 표시되지 않아요. 이러한 실패가 어디에서 드러나는지는 디버깅을 참고하세요.
registerLineTransform
registerLineTransform(fn)은 모든 장바구니 라인이 렌더링되기 전에 실행돼요. 쇼핑객의 장바구니에 실제로 담긴 것은 건드리지 않고 라인을 숨기거나 표시 방식을 변경하는 데 사용하세요.
함수는 읽기 전용 라인과 setter들을 받아요. 등록 해제 함수를 반환해요.
setInternalProperties는 번들 그룹화의 핵심 setter예요: 각 라인에 표준 번들 속성을 찍는 것이 서드파티 앱의 개별 장바구니 라인을 하나의 상품으로 렌더링하는 방법이에요. 다른 앱의 번들 라인 그룹화하기를 참고하세요.
registerLineComparator
Array.prototype.sort가 기대하는 것과 같은 형태의 비교자예요. 숨기기와 이름 변경 이후에 실행되므로 변환된 라인을 보게 돼요.
0을 반환하세요. 그래야 순서를 강제하는 대신 다음 비교자에게 결정을 넘겨요.
용도: 구독이나 고가 상품을 맨 위로 올리기, 무료 선물과 애드온을 맨 아래로 내리기, 스폰서 상품을 첫 번째로 유지하기예요.
registerCartEnricher
registerCartEnricher(registration)은 Shopify Storefront API에서 추가 상품 또는 변형 데이터를 가져와 일치하는 각 장바구니 라인의 line.metadata[id]에 첨부해요. Aftersell의 코드 변경 없이 메타필드, 태그 등 Storefront API가 노출하는 모든 것을 표시하는 데 사용하세요.
등록 해제 함수를 반환해요.
장바구니가 로드되거나 변경될 때마다 Aftersell은 장바구니의 모든 상품 또는 변형에 대해 프래그먼트를 가져와 결과를 첨부해요. 가져오기는 논블로킹이에요: 장바구니가 즉시 렌더링되고, 데이터가 도착하면
cart_updated가 다시 발생해요. 느리거나 실패하는 프래그먼트가 장바구니를 지연시키거나 망가뜨리는 일은 없어요.
line.metadata.pricing은 undefined이고, metadata 자체의 기본값은 {}예요.
용도: 모든 라인에 메타필드(배송 예정일, 성분 목록, “별도 배송” 플래그, 로열티 배수)를 가져와 커스텀 코드 블록으로 렌더링하는 데 사용하세요. 장바구니 라인에 메타필드 데이터 표시하기를 참고하세요.
각
id가 자체 네임스페이스이므로 여러 인리처가 문제없이 공존하며, 데이터가 절대 충돌하지 않아요.registerSubscriptionOptionsTransform
options.filter(...)를 작성해 다른 모든 앱의 플랜을 조용히 삭제하게 될 거예요. setter를 사용하면 자신의 편집만 기술할 수 있어요: 패치는 플랜별, 필드별로 병합되고, 같은 플랜의 같은 필드에 대한 실제 충돌은 마지막에 쓴 쪽이 이겨요. 예외를 던지는 변환은 아무것도 기여하지 않으며, 다른 변환은 계속 적용돼요.
모든 변환은 반쯤 패치된 뷰가 아니라 원본 옵션을 보므로, 등록 순서가 읽는 내용에 영향을 주지 않아요.
플랜 순서는 Shopify가 반환한 그대로 유지되므로 변환으로 순서를 변경할 수 없어요. 어떤 플랜이 먼저 제공될지(그리고 일회성 구매 업그레이드 버튼이 어떤 플랜을 구독할지) 제어하려면, 선택한 플랜을 맨 앞으로 올리는
registerDefaultSubscriptionOptionSelector를 사용하세요.discountPercent에는 setter가 없어요. Shopify가 결제 시 인정하지 않을 플랜은 선택기 안의 깨진 약속에 불과하기 때문이에요.
registerDefaultSubscriptionOptionSelector
id를 반환하거나, 넘어가려면 null을 반환하세요.
null을 반환하세요. 그래야 재정의하는 대신 다음 selector에게 결정을 넘겨요. 라인의 어떤 플랜과도 일치하지 않는 id는 null과 동일하게 처리되어 마찬가지로 넘어가므로, 오래된 id가 선택기를 비워 버릴 수 없어요.
함수는 (options, context)를 받으며, 옵션 변환과 같은 context예요.
registerSkipAddToCartRule
true를 반환하면 특정 상품 폼이 Aftersell을 완전히 우회하고 정상적으로 장바구니에 추가하도록 허용해요. 자체 리디렉션이나 처리가 필요한 폼에 유용해요.
true가 하나라도 있으면 건너뛰므로, 규칙을 좁게 유지해 소유한 특정 폼만 매칭하고 나머지에는 false를 반환하세요. 규칙은 등록 순서로 평가되고 첫 번째 true에서 멈추므로 규칙에 부작용을 넣지 마세요: 여러분의 규칙이 실행되는지 여부는 이전에 등록된 것에 달려 있어요.
용도: 자체 리디렉션이 필요한 예약 주문 또는 견적 폼, 구독 앱의 커스텀 플로우, 결제로 바로 이동해야 하는 “바로 구매” 버튼이에요. 페이지 전체의 가로채기를 끄려면 대신 skip_add_to_cart_interceptor를 사용하세요. 하지만 지정한 폼에만 적용되는 이 훅이 더 권장돼요.