InitTrait
Table of Contents
Constants
- TRACK_DEDUP_WINDOW : mixed = 1800
- Window in which a repeated impression or click of the same advert is not counted in the session.
- TRACK_MAX_IDS : mixed = 50
- Maximum number of ids accepted in one impression report (a page holds only a few places).
- TRACK_SESSION_SECTION : mixed = 'front.base.advertList.tracking'
Methods
- handleClick() : void
- Records an advert click. `trackClicks.js` sends `fetch(POST)` without `X-Requested-With`, so the gate checks the method, not AJAX; a robot with a bare GET gets 403.
- handleViews() : void
- Records advert impressions (`BatchSender.js`, GET with `X-Requested-With`).
- filterUntrackedIds() : array<int, int>
- Removes ids this session already reported within {@see TRACK_DEDUP_WINDOW} and remembers the rest.
- intilializeRender() : void
- isTargetedAt() : bool
- Page targeting (user decision 19. 10.): an advert with `show_everywhere` is shown on every page, otherwise only on the pages checked in admin. Without a checked page it is shown nowhere.
-
resolveAdvertContents()
: Advert>, 1: array
} - Returns the advert content in the page language ({@see TranslationFallback}): the active translation of the page language, then the active translation of the localization default language, otherwise the advert is skipped. An advert with empty content is skipped too; an empty `<li>` would only count impressions.
Constants
TRACK_DEDUP_WINDOW
Window in which a repeated impression or click of the same advert is not counted in the session.
private
mixed
TRACK_DEDUP_WINDOW
= 1800
TRACK_MAX_IDS
Maximum number of ids accepted in one impression report (a page holds only a few places).
private
mixed
TRACK_MAX_IDS
= 50
TRACK_SESSION_SECTION
private
mixed
TRACK_SESSION_SECTION
= 'front.base.advertList.tracking'
Methods
handleClick()
Records an advert click. `trackClicks.js` sends `fetch(POST)` without `X-Requested-With`, so the gate checks the method, not AJAX; a robot with a bare GET gets 403.
public
handleClick(int $advertId) : void
Parameters
- $advertId : int
Attributes
- #[Requires]
- $methods: 'POST'
handleViews()
Records advert impressions (`BatchSender.js`, GET with `X-Requested-With`).
public
handleViews(array<string|int, mixed> $ids) : void
IMPORTANT: the ids are gated, deduplicated and length-capped. Without that, place statistics could
be inflated and a nested array would crash the request with a TypeError.
Parameters
- $ids : array<string|int, mixed>
Attributes
- #[Requires]
- $ajax: true
filterUntrackedIds()
Removes ids this session already reported within {@see TRACK_DEDUP_WINDOW} and remembers the rest.
private
filterUntrackedIds(string $kind, array<int, int> $advertIds) : array<int, int>
A dropped cookie bypasses the dedup, but each request still carries a bounded number of ids and a robot without JS or AJAX never reaches the signal.
Parameters
- $kind : string
- $advertIds : array<int, int>
Return values
array<int, int>intilializeRender()
private
intilializeRender(int $advertPlaceId[, int|null $count = 5 ]) : void
Parameters
- $advertPlaceId : int
- $count : int|null = 5
isTargetedAt()
Page targeting (user decision 19. 10.): an advert with `show_everywhere` is shown on every page, otherwise only on the pages checked in admin. Without a checked page it is shown nowhere.
private
isTargetedAt(Advert $advert, int|null $pageId) : bool
Parameters
- $advert : Advert
- $pageId : int|null
Return values
boolresolveAdvertContents()
Returns the advert content in the page language ({@see TranslationFallback}): the active translation of the page language, then the active translation of the localization default language, otherwise the advert is skipped. An advert with empty content is skipped too; an empty `<li>` would only count impressions.
private
resolveAdvertContents(iterable<string|int, mixed> $adverts) : Advert>, 1: array}
Parameters
- $adverts : iterable<string|int, mixed>
Return values
Advert>, 1: array[adverts to render, id => HTML]