---
title: "Meranie zobrazení a klikov — Advertisements for Laravel | Roundly"
description: "Zaznamenávajte zobrazenia a kliky živých reklám priamo alebo cez frontu, s transakčnými počítadlami, CTR, kontextom a reportmi podľa krajín."
url: https://roundly-consulting.com/sk/open-source/navody/advertisements-for-laravel/zobrazenia-a-kliky
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Advertisements for Laravel](https://roundly-consulting.com/sk/open-source/navody/advertisements-for-laravel.md)

# Meranie zobrazení a klikov

Zobrazenia a kliky zaznamenáte synchrónne alebo, pri tracking.buffered nastavenom na true, cez frontu. Obe cesty v jednej transakcii zapíšu riadok do advertisement\_events a zvýšia denormalizované počítadlo — neúspešný zápis nezanechá ani jedno, takže opakovaný job nikdy nezapočíta dvakrát — a potom spustia udalosť:

```php
use RoundlyConsulting\Advertisements\DataTransferObjects\ImpressionData;
use RoundlyConsulting\Advertisements\Facades\Advertisements;

Advertisements::for($ad)->track('sidebar')->impression();
Advertisements::for($ad)->track('sidebar')->click(new ImpressionData(
    ip: $request->ip(),
    userAgent: $request->userAgent(),
    referrer: $request->headers->get('referer'),
));
Advertisements::for($ad)->track()->impression(); // no placement

$ad->impressions(); // int  (impressions_count)
$ad->clicks();      // int  (clicks_count)
$ad->ctr();         // float 0.0–1.0
$ad->events;        // HasMany<AdvertisementEvent>
```

ctr() je podiel klikov a zobrazení (0.0–1.0), a kým nie sú žiadne zobrazenia, vracia 0.0. Umiestnenie je voliteľné a prijíma model, id alebo slug.

## Čo track() odmietne

track() odmietne reklamu, ktorá práve nie je živá — koncept, naplánovanú, expirovanú či archivovanú reklamu (AdvertisementNotActive) — a track($placement) navyše odmietne umiestnenie, v ktorom reklama nebeží (AdvertisementNotInPlacement). Obe sú AdvertisementException, takže podvrhnutá či zastaraná URL zobrazenia alebo kliku nič nezapočíta; v controlleri presmerovania kliku zachyťte základnú triedu a reagujte podľa potreby:

```php
use RoundlyConsulting\Advertisements\DataTransferObjects\ImpressionData;
use RoundlyConsulting\Advertisements\Exceptions\AdvertisementException;
use RoundlyConsulting\Advertisements\Facades\Advertisements;

try {
    Advertisements::for($ad)->track('sidebar')->click(new ImpressionData(ip: $request->ip()));
} catch (AdvertisementException) {
    // not credited: the ad is not live, or never ran in this placement
}
```

## Kontext požiadavky

ImpressionData je voliteľné, rovnako ako každé jeho pole — ip, userAgent, referrer, occurredAt a meta. Zadaný kontext sa zlúči do meta udalosti; kľúče s hodnotou null sa vynechajú:

```php
use Illuminate\Support\Collection;

// Inline mode returns the persisted AdvertisementEvent (buffered mode: null)
$event = Advertisements::for($ad)->track('sidebar')->click(new ImpressionData(
    ip: $request->ip(),
    occurredAt: now(),                                     // defaults to now
    meta: new Collection(['campaign' => 'autumn-launch']), // your own keys
));

$event->type;          // AdvertisementEventType::Click
$event->occurred_at;   // Carbon
$event->placement;     // ?Placement
$event->meta;          // Collection — ip, user_agent, referrer (when given) + your keys
$event->country_code;  // 'SK' when geo stamping resolved the IP, else null
```

## Zápis cez frontu

Pri vysokej návštevnosti môžete zápis presunúť mimo požiadavky. So zapnutým bufferovaním vrátia impression() a click() null a RecordAdvertisementEventJob vykoná zápis tým istým jadrom na nakonfigurovanom spojení a fronte — synchrónny aj odložený zápis vedú k rovnakému výsledku. Kontrola živej reklamy aj umiestnenia prebehne už pri volaní track(), ešte pred zaradením jobu do fronty. Job nesie len id, nikdy celé modely; reklama zmazaná pred spustením jobu sa preskočí.

```bash
ADVERTISEMENTS_TRACKING_BUFFERED=true
ADVERTISEMENTS_TRACKING_CONNECTION=redis   # unset or blank = the default connection
ADVERTISEMENTS_TRACKING_QUEUE=tracking     # unset or blank = the default queue

php artisan queue:work redis --queue=tracking
```

## Reporty podľa krajín

Keď je geo.stamp\_events zapnuté a ImpressionData obsahuje IP adresu, zápis ju cez geolocation-for-laravel preloží na polohu a krajinu diváka uloží do indexovaného stĺpca country\_code, región, mesto, zemepisnú šírku a dĺžku do meta:

```php
use RoundlyConsulting\Advertisements\DataTransferObjects\ImpressionData;

Advertisements::for($ad)->track('sidebar')->impression(new ImpressionData(ip: $request->ip()));

$ad->impressionsByCountry(); // ['SK' => 1240, 'CZ' => 310]
$ad->clicksByCountry();      // ['SK' => 58]
```

Zlyhanie zistenia polohy zápis nikdy nepreruší: IP adresa, ktorú geolokácia neurčí, divák určený bez krajiny aj vyhľadanie, ktoré vyhodí výnimku (chýbajúca databáza MaxMind, rate limit, chyba vlastného poskytovateľa), uložia udalosť s country\_code null a počítadlo aj tak zvýšia. Výnimku z vyhľadania dostane report() vášho exception handlera, takže nefunkčný poskytovateľ sa objaví v logoch a nezlyháva potichu. Funguje to aj pri zápise cez frontu.

## Reakcia na meranie

Počúvajte ImpressionRecorded a ClickRecorded — každá sprístupňuje uložený AdvertisementEvent vo verejnej vlastnosti $event (pozri Udalosti).

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/advertisements-for-laravel.md)
