Pixelflow
Ereignis-Tracking via Klassen

Event-Klassen auf Framer

Hinweis: Wir haben jetzt eine einfachere Tracking-Erfahrung für Framer veröffentlicht, indem wir den Visual Tagger verwenden – ein Widget, das auf Ihrer Framer-Website geladen wird und es Ihnen ermöglicht, jedes Element anzuklicken und mit einem Event zu taggen. Weitere Informationen finden Sie hier.

So kennzeichnen Sie bestimmte Elemente auf Ihrer Framer-Website und weisen ihnen Events zu

Informationen dazu, wie Sie Events verfolgen, indem Sie ein bestimmtes Event einer bestimmten URL zuweisen, finden Sie in diesem Leitfaden.

Um bestimmte Elemente auf Ihrer Website zu kennzeichnen, die Sie verfolgen möchten, folgen Sie der untenstehenden Anleitung.

So verwenden Sie Event-Klassen auf Framer

Fügen Sie die Klasse aus dem Klassendokument zu Elementen hinzu, indem Sie die Code-Overrides-Funktion von Framer nutzen. Folgen Sie diesen Schritten:

Einrichten von Code-Overrides

  1. Klicken Sie im Framer Designer auf ein beliebiges Element, das Sie verfolgen möchten

  2. Scrollen Sie im rechten Panel nach unten zum Abschnitt Code Overrides und klappen Sie diesen auf

  3. Klicken Sie im Feld file auf das Dropdown-Menü, wählen Sie New file, benennen Sie Ihr Override (z. B. PixelFlowClasses) und klicken Sie auf Create

  4. Löschen Sie den erstellten Inhalt und ersetzen Sie ihn durch den folgenden Code:

    import type { ComponentType } from 'react';
    export function AddPaymentInfo(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-pymt-001-pf')
    			: (props.className = 'action-btn-pymt-001-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function Subscribe(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-sub-002-pf')
    			: (props.className = 'action-btn-sub-002-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function Contact(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-cntct-003-pf')
    			: (props.className = 'action-btn-cntct-003-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function InitiateCheckout(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-buy-004-pf')
    			: (props.className = 'action-btn-buy-004-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function AddToCart(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-cart-005-pf')
    			: (props.className = 'action-btn-cart-005-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function AddToWishlist(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-wl-006-pf')
    			: (props.className = 'action-btn-wl-006-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function CompleteRegistration(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-reg-007-pf')
    			: (props.className = 'action-btn-reg-007-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function CustomizeProduct(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-cstm-008-pf')
    			: (props.className = 'action-btn-cstm-008-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function Donate(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-don-009-pf')
    			: (props.className = 'action-btn-don-009-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function Lead(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-lead-011-pf')
    			: (props.className = 'action-btn-lead-011-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function StartTrial(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-trial-012-pf')
    			: (props.className = 'action-btn-trial-012-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function SubmitApplication(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-submit-013-pf')
    			: (props.className = 'action-btn-submit-013-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function SearchInput(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-inpt-srch-014-pf')
    			: (props.className = 'action-inpt-srch-014-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function SearchButton(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-srch-015-pf')
    			: (props.className = 'action-btn-srch-015-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FindLocationInput(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-inpt-loc-016-pf')
    			: (props.className = 'action-inpt-loc-016-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FindLocationButton(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-loc-017-pf')
    			: (props.className = 'action-btn-loc-017-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function Purchase(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-plc-ord-018-pf')
    			: (props.className = 'action-btn-plc-ord-018-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function ViewContent(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' action-btn-vc-019-pf')
    			: (props.className = 'action-btn-vc-019-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function ProductsListContainer(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-chk-itm-ctnr-pf')
    			: (props.className = 'info-chk-itm-ctnr-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function ProductsListTotalPrice(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-totl-amt-pf')
    			: (props.className = 'info-totl-amt-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function ProductContainer(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-chk-itm-pf')
    			: (props.className = 'info-chk-itm-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function ProductId(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-itm-id-pf')
    			: (props.className = 'info-itm-id-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function ProductPrice(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-itm-prc-pf')
    			: (props.className = 'info-itm-prc-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function ProductQuantity(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-itm-qnty-pf')
    			: (props.className = 'info-itm-qnty-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FormContainer(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-frm-cntr-pf')
    			: (props.className = 'info-frm-cntr-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FormValueOrPrice(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-val-pf')
    			: (props.className = 'info-val-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FormFullNameInput(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-cust-full-name-pf')
    			: (props.className = 'info-cust-full-name-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FormFirstNameInput(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-cust-fn-pf')
    			: (props.className = 'info-cust-fn-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FormLastNameInput(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-cust-ln-pf')
    			: (props.className = 'info-cust-ln-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FormEmailInput(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-cust-em-pf')
    			: (props.className = 'info-cust-em-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FormPhoneInput(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-cust-ph-pf')
    			: (props.className = 'info-cust-ph-pf');
    		return <Component {...props} />;
    	};
    }
    
    export function FormSearchLocationInput(Component): ComponentType {
    	return (props) => {
    		props.className
    			? (props.className += ' info-srch-ctnr-pf')
    			: (props.className = 'info-srch-ctnr-pf');
    		return <Component {...props} />;
    	};
    }

Sie müssen diese Datei nur einmal erstellen. Nachdem sie erstellt wurde, können Sie sie für alle Elemente wiederverwenden, die Sie auf Ihrer Framer-Website verfolgen möchten.

Anwenden von Event-Klassen auf Elemente

  1. Klicken Sie im Framer Designer auf das Element, das Sie verfolgen möchten

  2. Wählen Sie im Abschnitt Code Overrides Ihre erstellte Datei (z. B. PixelFlowClasses) im Feld file aus

  3. Suchen Sie im Klassendokument nach der Klasse, die dem Event entspricht, das Sie verfolgen möchten

  4. Klicken Sie im Framer Designer auf das Feld Override und wählen Sie die entsprechende Klasse aus dem Dropdown-Menü aus (z. B. AddPaymentInfo oder Subscribe)

  5. Sobald dies erledigt ist, veröffentlichen Sie Ihre Website, um die Änderungen zu übernehmen

Vergessen Sie nicht, Ihre Framer-Website nach dem Hinzufügen von Event-Klassen zu veröffentlichen. Änderungen werden erst wirksam, wenn die Website live ist.

Beispiel: Tracking eines Subscribe-Buttons

Wenn Sie ein „Subscribe“-Event jedes Mal verfolgen möchten, wenn jemand auf einen bestimmten „Subscribe“-Button auf Ihrer Framer-Website klickt:

  1. Finden Sie die Subscribe-Klasse im Klassendokument: action-btn-sub-002-pf

  2. Klicken Sie auf Ihren Subscribe-Button im Framer Designer

  3. Wählen Sie im Abschnitt Code Overrides Ihre PixelFlowClasses-Datei aus

  4. Wählen Sie im Dropdown-Menü Override Subscribe aus

  5. Veröffentlichen Sie Ihre Website

Nach der Veröffentlichung wird PixelFlow automatisch Subscribe-Events erfassen, sobald Nutzer auf diesen Button klicken, und die Daten an Meta senden.

Tracking von Formularübermittlungen

Um Formularübermittlungen zu verfolgen und Benutzerdaten (Name, E-Mail, Telefon) zu erfassen, müssen Sie Overrides sowohl für den Formular-Container als auch für die einzelnen Eingabefelder hinzufügen:

  1. Fügen Sie den FormContainer Override zu Ihrem Formular-Container-Element hinzu

  2. Fügen Sie den entsprechenden Action-Override zu Ihrem Absende-Button hinzu (z. B. Lead für ein Lead-Event)

  3. Fügen Sie Overrides zur Datenextraktion zu Ihren Eingabefeldern hinzu:

    • FormNameInput für das Feld „Vorname“

    • FormEmailInput für das Feld „E-Mail“

    • FormPhoneInput für das Feld „Telefon“

    • FormLastNameInput für das Feld „Nachname“

Jeder Override entspricht einer spezifischen PixelFlow-Klasse. Zum Beispiel wendet FormNameInput die Klasse info-cust-fn-pf an und FormEmailInput die Klasse info-cust-em-pf.

Überprüfen Ihres Setups

Nachdem Sie die Overrides zu Ihren Elementen hinzugefügt und veröffentlicht haben:

  1. Besuchen Sie Ihre Seite auf der Live-Website (nicht im Vorschaumodus)

  2. Klicken Sie mit der rechten Maustaste auf das Element und wählen Sie Untersuchen oder Element untersuchen

  3. Prüfen Sie in den Entwicklertools, ob die PixelFlow-Klasse im HTML-Code für dieses Element erscheint

  4. Testen Sie das Tracking, indem Sie das Event auslösen (den Button klicken, das Formular absenden usw.)

  5. Überprüfen Sie Ihr PixelFlow-Dashboard, um zu bestätigen, dass das Event erfasst wurde

Häufige Probleme und Lösungen

Override erscheint nicht im Dropdown-Menü

  • Stellen Sie sicher, dass Sie die Override-Datei erstellt und den vollständigen Code eingefügt haben

  • Überprüfen Sie, ob der Code keine Syntaxfehler enthält

  • Versuchen Sie, den Framer Designer zu aktualisieren oder das Projekt zu schließen und erneut zu öffnen

Events werden im PixelFlow-Dashboard nicht getrackt

  • Überprüfen Sie, ob das PixelFlow-Skript korrekt installiert ist (siehe Framer Setup-Leitfaden)

  • Bestätigen Sie, dass Sie Ihre Website nach dem Hinzufügen der Overrides veröffentlicht haben

  • Stellen Sie sicher, dass Sie den richtigen Override aus dem Dropdown-Menü ausgewählt haben

  • Überprüfen Sie Ihre Browser-Konsole auf JavaScript-Fehler, die das Tracking verhindern könnten

Formulardaten werden nicht erfasst

  • Stellen Sie sicher, dass der FormContainer-Override dem Formular-Wrapper-Element hinzugefügt wurde

  • Überprüfen Sie, ob die Overrides für Eingabefelder den tatsächlichen Input-Elementen hinzugefügt wurden, nicht den Labels oder Wrappern

  • Stellen Sie sicher, dass die Override-Namen exakt mit denen in der Codedatei übereinstimmen

Nächste Schritte

War das hilfreich?