Module: Www::TrackingHelper
- Defined in:
- app/helpers/www/tracking_helper.rb
Overview
Helper methods for trackable elements with Analytics integration
Include this helper where you need trackable phone links or other
tracked contact elements.
Instance Method Summary collapse
-
#trackable_phone_link(phone_number: nil, link_number: nil, label: nil, class_names: nil, style: :default, icon: false, **html_options) ⇒ Object
Trackable phone link.
-
#tracking_event_id_meta_tag(record) ⇒ ActiveSupport::SafeBuffer?
Emit the shared CAPI/pixel deduplication id as a meta tag so the browser-side Analytics fan-out can read it via
Analytics.serverEventId()and pass it to every server-mirrored conversion event (Pinterest, OpenAI Ads, etc.).
Instance Method Details
#trackable_phone_link(phone_number: nil, link_number: nil, label: nil, class_names: nil, style: :default, icon: false, **html_options) ⇒ Object
Trackable phone link
Generates a phone link with consistent styling.
Usage:
<%# Basic usage %>
<%= trackable_phone_link %>
<%# With custom label %>
<%= trackable_phone_link(label: "Call Us Now") %>
<%# Button style %>
<%= trackable_phone_link(style: :button) %>
<%# With icon %>
<%= trackable_phone_link(icon: true) %>
<%# Inline in text %>
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/helpers/www/tracking_helper.rb', line 52 def trackable_phone_link(phone_number: nil, link_number: nil, label: nil, class_names: nil, style: :default, icon: false, **) # Use constants as defaults - client-side JS swaps these if ga_phone cookie exists display_number = phone_number || PhoneNumbers::TOLLFREE tel_number = link_number || PhoneNumbers::TOLLFREE_LINK # Build CSS classes based on style base_classes = %w[wy-click-to-call phone-text-link] style_classes = case style when :button %w[btn btn-outline-primary] when :footer %w[fs-4 text btn-link p-0 footer-link] when :inline %w[btn-link p-0] else %w[contact-phone] end all_classes = (base_classes + style_classes + Array(class_names&.split)).compact.join(' ') # Build the link content content = if icon safe_join([fa_icon('phone', class: 'pe-1'), label || display_number]) else label || display_number end # Build the link — aria-label must contain visible text (WCAG 2.5.3) opts = { rel: 'nofollow', class: all_classes } opts[:aria] = { label: "Call #{display_number}" } if label.blank? opts.merge!() link_to content, "tel:+#{tel_number}", **opts end |
#tracking_event_id_meta_tag(record) ⇒ ActiveSupport::SafeBuffer?
Emit the shared CAPI/pixel deduplication id as a meta tag so the
browser-side Analytics fan-out can read it via Analytics.serverEventId()
and pass it to every server-mirrored conversion event (Pinterest, OpenAI
Ads, etc.). The server-side reporters read the same tracking_event_id
off the record, so pixel and CAPI events match and dedupe correctly.
Call from any conversion-success view that has a record exposing
tracking_event_id — order confirmation, lead-form thank-you, instant
quote completion. No-ops when the record is nil or lacks the column
(legacy records pre-PR 3) so the helper is safe to drop in unconditionally.
Usage:
<%# Order confirmation %>
<%= tracking_event_id_meta_tag(@order) %>
<%# Lead form thank-you %>
<%= tracking_event_id_meta_tag(@opportunity) %>
110 111 112 113 114 115 116 117 |
# File 'app/helpers/www/tracking_helper.rb', line 110 def (record) return nil unless record.respond_to?(:tracking_event_id) event_id = record.tracking_event_id.presence return nil unless event_id tag.(name: 'tracking:event-id', content: event_id) end |