Files

139 lines
7.1 KiB
Markdown

---
phase: 03-ga4-checkout-events
plan: 01
subsystem: analytics
tags: [prestashop, ga4, checkout, ecommerce-events]
requires: []
provides:
- GA4 checkout funnel event sequencing fixes for pdgoogleanalytycs4pro
- Dedupe guards for begin_checkout, add_shipping_info, and add_payment_info
affects: [checkout, analytics, tag-assistant-validation]
tech-stack:
added: []
patterns: [sessionStorage event dedupe, AJAX script execution container]
key-files:
created: []
modified:
- modules/pdgoogleanalytycs4pro/views/templates/hook/displayFooter.tpl
- modules/pdgoogleanalytycs4pro/views/js/scripts_17.js
- modules/pdgoogleanalytycs4pro/controllers/front/ajax.php
key-decisions:
- "begin_checkout restored to checkout footer with dedupe after cart-click-only trigger failed in real flow"
- "AJAX-returned script snippets are explicitly executed after insertion"
patterns-established:
- "Checkout analytics events use sessionStorage keys to avoid duplicate sends for same cart payload/selection"
duration: 29min
started: 2026-05-11T15:24:00+02:00
completed: 2026-05-11T15:53:27+02:00
---
# Phase 3 Plan 01: GA4 Checkout Events Summary
GA4 checkout tracking in `pdgoogleanalytycs4pro` was adjusted so `begin_checkout`, `add_shipping_info`, and `add_payment_info` have explicit trigger paths and duplicate protection while preserving the existing `purchase` template path.
## Performance
| Metric | Value |
|--------|-------|
| Duration | 29min |
| Started | 2026-05-11T15:24:00+02:00 |
| Completed | 2026-05-11T15:53:27+02:00 |
| Tasks | 3 automated tasks completed, 1 human verification checkpoint not confirmed in chat |
| Files modified | 3 module files plus PAUL docs |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Begin Checkout Fires Once From Cart CTA | Partial | Initial cart-click-only implementation failed in real flow. Hotfix restored `begin_checkout` on checkout footer with `sessionStorage` dedupe key `pdga4_begin_checkout_v2_*`, so it should fire once per cart payload rather than on every step. |
| AC-2: Shipping Event Fires At Shipping Stage | Implemented, pending external verification | JS handlers call `addDeliveryInfo` from carrier selection, delivery submit, and relevant PrestaShop checkout events. AJAX script response is now explicitly evaluated. |
| AC-3: Payment Event Fires On Payment Selection | Implemented, pending external verification | Payment option selection calls `addPaymentInfo` with cart/payment dedupe and explicit script execution. |
| AC-4: Purchase Remains Available On Confirmation | Pass by code inspection | `displayOrderConfirmation.tpl` purchase path was not moved or disabled; only earlier checkout event files changed. |
## Accomplishments
- Restored reliable `begin_checkout` emission on checkout load while preventing repeated sends for the same cart payload.
- Added shared JS helpers for checkout analytics event dedupe and AJAX-rendered script execution.
- Updated shipping/payment event AJAX handling to work even when `#hook-display-before-carrier` is absent.
- Fixed unsafe coupon checks in `controllers/front/ajax.php` and guarded carrier-name lookup.
## Task Commits
No git commits were created during this APPLY/UNIFY session.
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `modules/pdgoogleanalytycs4pro/views/templates/hook/displayFooter.tpl` | Modified | Restored `begin_checkout` payload on checkout pages with `sessionStorage` dedupe; retained cart payload preparation. |
| `modules/pdgoogleanalytycs4pro/views/js/scripts_17.js` | Modified | Added helper functions for dedupe, shipping/payment AJAX calls, stable script insertion, and checkout event bindings. |
| `modules/pdgoogleanalytycs4pro/controllers/front/ajax.php` | Modified | Fixed coupon boolean logic and carrier lookup safety for add shipping/payment info responses. |
| `.paul/ROADMAP.md` | Modified | Added/closed Phase 3 GA4 checkout events scope. |
| `.paul/STATE.md` | Modified | Updated loop state through PLAN/APPLY/UNIFY. |
## Decisions Made
| Decision | Rationale | Impact |
|----------|-----------|--------|
| Restore `begin_checkout` to checkout footer with dedupe | Cart-click-only implementation caused all requested events to disappear in user testing. | Prioritizes reliable event availability while still reducing repeated step fires. |
| Explicitly execute AJAX response scripts | Injected Smarty event snippets may not execute consistently through `.html()` alone. | Increases reliability for `add_shipping_info` and `add_payment_info`. |
| Keep `purchase` path unchanged | Existing purchase event is generated by order confirmation template/server-side flow. | Reduces regression risk for completed orders. |
## Deviations from Plan
### Summary
| Type | Count | Impact |
|------|-------|--------|
| Auto-fixed | 1 | Essential hotfix after user reported no events firing. |
| Scope additions | 1 | Added explicit AJAX script execution helper to make existing event templates reliable. |
| Deferred | 1 | Final Tag Assistant confirmation after hotfix is still recommended. |
### Auto-fixed Issues
**1. Checkout events disappeared after first implementation**
- **Found during:** Human verification checkpoint
- **Issue:** Moving `begin_checkout` exclusively to cart CTA was not reliable in the real checkout flow.
- **Fix:** Restored checkout-footer `begin_checkout` with dedupe key `pdga4_begin_checkout_v2_*`; left cart click as intent-only.
- **Files:** `displayFooter.tpl`, `scripts_17.js`
- **Verification:** JS syntax check and PHP lint passed; final Tag Assistant confirmation pending.
### Deferred Items
- Confirm in Tag Assistant after clearing `sessionStorage` or using an incognito window:
`begin_checkout` once -> `add_shipping_info` -> `add_payment_info` -> `purchase`.
## Issues Encountered
| Issue | Resolution |
|-------|------------|
| `php` command was not on PATH | Used `C:\php\8.5\php.exe -l` for PHP syntax verification. |
| Initial APPLY did not satisfy live behavior | Applied urgent hotfix and documented the deviation. |
| Human checkpoint was not approved after hotfix | Closing loop with residual external-verification risk documented. |
## Verification Results
| Check | Result |
|-------|--------|
| `node --check modules\pdgoogleanalytycs4pro\views\js\scripts_17.js` | Pass |
| `C:\php\8.5\php.exe -l modules\pdgoogleanalytycs4pro\controllers\front\ajax.php` | Pass |
| Code inspection: `displayOrderConfirmation.tpl` still contains `gtag('event', 'purchase', ...)` | Pass |
| Tag Assistant full checkout sequence after hotfix | Not confirmed in chat |
## Next Phase Readiness
**Ready:**
- Module code is implementation-complete and syntax-checked.
- GA4 event trigger paths are centralized in `scripts_17.js`.
**Concerns:**
- Browser/session cache may retain old `sessionStorage` dedupe keys during testing; validate in incognito or after clearing storage.
- Final Tag Assistant observation is still the source of truth for live GTM/GA4 behavior.
**Blockers:**
- None for code completion; live analytics validation remains recommended.
---
*Phase: 03-ga4-checkout-events, Plan: 01*
*Completed: 2026-05-11*