Module d'exemple (kixenrichdemo)
Le module kixenrichdemo est un exemple minimal et fonctionnel d'enrichissement des items via le hook actionKixellTagEnrichItems. Vous pouvez le reprendre comme point de départ.
1. Enregistrer le hook
À l'installation, le module s'abonne au hook :
public function install()
{
return parent::install() && $this->registerHook('actionKixellTagEnrichItems');
}
2. Implémenter le hook
La méthode enrichit les items pour les pages de liste, les fiches produit et le tunnel d'achat, et sort immédiatement pour les autres événements. Vous pouvez ainsi enrichir aussi bien view_item_list, view_item et select_item que les événements de panier et de commande :
public function hookActionKixellTagEnrichItems(array $params)
{
try {
$event = isset($params['event']) ? $params['event'] : null;
if (empty($event)) {
return;
}
$enriched_events = [
'view_item_list',
'view_item',
'select_item',
'add_to_cart',
'remove_from_cart',
'view_cart',
'begin_checkout',
'checkout_address',
'checkout_shipping',
'checkout_payment',
'purchase',
];
if (!in_array($event, $enriched_events, true)) {
return; // événement non traité : aucun item n'est itéré
}
if (empty($params['items']) || !is_array($params['items'])) {
return;
}
$id_cart = isset($params['id_cart']) ? $params['id_cart'] : null;
$id_order = isset($params['id_order']) ? $params['id_order'] : null;
foreach ($params['items'] as $item) {
if (!is_object($item)) {
continue;
}
// Toute propriété publique non nulle ajoutée ici se retrouve dans l'item GA4.
$item->enrich_id_product = isset($item->item_id_product) ? $item->item_id_product : null;
$item->enrich_id_variant = isset($item->item_id_variant) ? $item->item_id_variant : null;
$item->enrich_id_cart = $id_cart;
$item->enrich_id_order = $id_order;
$item->enrich_label = $event;
}
} catch (Exception $e) {
// Ne jamais laisser une exception casser la construction du dataLayer.
}
}
$item reçus. Pas besoin de retourner quoi que ce soit : Kixell Tag relit les items après le hook et embarque les champs ajoutés.
3. Vérifier que le hook se déclenche
Le module de démonstration journalise chaque appel dans un fichier quotidien kixenrichdemo-AAAA-MM-JJ.log, ce qui permet de confirmer que le hook est bien appelé et d'inspecter ce qu'il reçoit :
14:22:01 event=add_to_cart items=1 id_shop=1 id_cart=42 id_order=-
14:23:17 event=purchase items=3 id_shop=1 id_cart=42 id_order=KX-100245
Vous pouvez ensuite contrôler le résultat dans le dataLayer du navigateur : les champs ajoutés (enrich_id_product, enrich_label, …) apparaissent au sein de chaque item de l'événement concerné.
Remplacer par vos données métier
Dans la boucle, remplacez les champs d'exemple par vos propres données métier — par exemple vehicle, circuit, surface, texture… issues de votre base :
$item->vehicle = $this->getVehicle((int) $item->item_id_product);
$item->circuit = $this->getCircuit((int) $item->item_id_product);
$item->surface = $this->getSurface((int) $item->item_id_product);
$item->texture = $this->getTexture((int) $item->item_id_product);
Ces valeurs seront disponibles dans Google Tag Manager et exploitables dans vos balises et audiences.