---
title: "Geografické cielenie — Advertisements for Laravel | Roundly"
description: "Obmedzte reklamy na povolené či zablokované krajiny alebo okruh okolo bodu a každému divákovi servírujte len reklamy zodpovedajúce jeho polohe."
url: https://roundly-consulting.com/sk/open-source/navody/advertisements-for-laravel/geograficke-cielenie
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)

# Geografické cielenie

Reklamy deklarujú cielenie hodnotovým objektom Targeting — povolené a zablokované krajiny a/alebo okruh okolo bodu. Pri servírovaní získate aktívne reklamy umiestnenia, ktoré zodpovedajú polohe diváka:

```php
use RoundlyConsulting\Advertisements\Facades\Advertisements;
use RoundlyConsulting\Advertisements\ValueObjects\Targeting;
use RoundlyConsulting\Geolocation\DataTransferObjects\Coordinates;

$ad->targeting = new Targeting(
    countries: ['SK', 'CZ'],                 // allow list (empty = any)
    excludeCountries: ['RU'],                // deny list
    center: new Coordinates(48.1486, 17.1077),
    radiusKm: 50.0,
);
$ad->save();

// Resolve the viewer from the request IP (geolocation), or pass a Location / null:
$ads = Advertisements::targetedIn('sidebar', request())->get();

// Or the model scope directly:
Advertisement::query()->active()->forPlacement('sidebar')->targetedAt($location)->get();
```

targetedIn() preloží Request — alebo aktuálnu požiadavku, ak nič nezadáte — na polohu cez geolocation-for-laravel, prípadne prijme už zistenú Location. Vyhľadanie, ktoré vyhodí výnimku, sa nahlási a divák sa považuje za neznámeho, takže geolokácia servírovanie nikdy nezhodí. Pri vypnutom geo.targeting\_enabled sa správa rovnako ako in().

## Pravidlá zhody

- excludeCountries — zoznam zakázaných kódov ISO, kontroluje sa ako prvý.
- countries — zoznam povolených krajín; prázdny znamená akúkoľvek krajinu.
- center + radiusKm — divák musí byť do radiusKm od stredu (presný Haversinov vzorec). Platí len vtedy, keď sú nastavené obe hodnoty.
- Reklama sa zhoduje, keď divák spĺňa každé pravidlo, ktoré nastavuje: zoznamy povolených a zakázaných krajín kontrolujú krajinu diváka, okruh jeho súradnice.
- Reklama bez cielenia (null alebo prázdny new Targeting(), ktorý sa uloží ako žiadne cielenie) sa zobrazí každému divákovi, kým je geo.untargeted\_match zapnuté.

## Neznámi diváci a chýbajúce údaje

Divákom môže byť Location, samotné Coordinates, kód krajiny ISO, Request (poloha sa zistí z jeho IP) alebo null. Čo sa stane, keď o divákovi niečo nevieme, určuje geo.match\_when\_unknown:

| Divák je… | untargeted\_only (predvolené) | all |
| --- | --- | --- |
| neznámy — null, IP adresa, ktorú geolokácia neurčí (alebo ktorej vyhľadanie vyhodí výnimku), prázdny kód krajiny, Location bez krajiny aj súradníc | len reklamy bez cielenia | všetky reklamy |
| známy len podľa krajiny („US“, Location na 0,0) | pravidlo okruhu neplatí | pravidlo okruhu platí |
| známy len podľa súradníc (Coordinates, Location bez krajiny) | zoznam krajín neplatí | zoznam krajín platí |

Pri predvolenom nastavení teda divák známy len ako „US“ nikdy nedostane reklamu obmedzenú na 50 km okolo Bratislavy a samotné súradnice New Yorku nikdy nedostanú reklamu len pre SK.

## Scope targetedAt()

Scope, na ktorom stojí targetedIn(), prijíma diváka v štyroch podobách:

```php
use RoundlyConsulting\Geolocation\DataTransferObjects\Coordinates;

Advertisement::query()->active()->targetedAt($location)->get();   // Location — country lists + radius
Advertisement::query()->active()->targetedAt('SK')->get();        // country only — a radius rule can't be checked
Advertisement::query()->active()
    ->targetedAt(new Coordinates(48.1486, 17.1077))->get();       // coordinates only — a country list can't be checked
Advertisement::query()->active()->targetedAt(null)->get();        // unknown viewer — per geo.match_when_unknown
```

Cielenie sa vyhodnocuje presne v PHP nad kandidátmi, ktorých už zúžil okolitý dopyt — preto pred ním reťazte active() a forPlacement().

## Čítanie a zrušenie cielenia

```php
$targeting = $ad->targeting;         // ?Targeting
$targeting?->isEmpty();              // no country list and no radius (centre + radiusKm)
$targeting?->matches('SK');          // Location, Coordinates or a country code
$targeting?->matches('SK', true);    // a rule the viewer lacks the fact for counts as met
$targeting?->toArray();              // ['countries' => [...], 'exclude_countries' => [...], 'center' => [...], 'radius_km' => 50.0]

$ad->targeting = Targeting::fromArray([   // snake_case payload, e.g. from a form
    'countries' => ['sk', 'cz'],          // normalised to upper case
    'center' => ['latitude' => 48.1486, 'longitude' => 17.1077],
    'radius_km' => 25,
]);

$ad->targeting = null;                    // untargeted again
$ad->save();
```

Cast ukladá cielenie ako JSON a stred skopíruje do stĺpcov target\_latitude a target\_longitude. Cielenie zrušíte priradením null (alebo prázdneho Targeting); iná hodnota než Targeting alebo null vyhodí InvalidTargeting. Stred bez okruhu ani okruh bez stredu nie je pravidlo.

## 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)
