139 lines
7.1 KiB
Markdown
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*
|