Placements
A placement is a named place in your app where Grona content can appear. Placements describe places, not use cases: cart_top is the top of the basket screen, whatever campaign fills it this week. Use this page to decide which placements to add to your screens before you wire up slot views or decisions.
The placement catalogue
Section titled “The placement catalogue”The catalogue is a fixed set in this version. Every campaign names one of these placements, and a configuration that names any other placement makes that campaign inactive.
| Placement | Where it typically sits | Keyed |
|---|---|---|
home_top |
At the top of the home screen, above the first content row | No |
home_feed |
Between rows of the home screen feed | No |
plp_inline |
Inline in a product listing or category page, between product rows | No |
pdp_below_buy |
On a product detail page, directly below the add-to-basket button | No |
cart_line |
On an individual basket line, one per line | Yes, by product id |
cart_top |
At the top of the basket screen, above the lines | No |
cart_below_lines |
On the basket screen, below the last line | No |
checkout_above_pay |
On the checkout screen, directly above the pay button | No |
order_confirmation |
On the order confirmation screen after a purchase | No |
membership_top |
At the top of the membership screen | No |
Placements, screens and keys
Section titled “Placements, screens and keys”When you bind a placement, you also pass the current screen (home, categories, search, a category, a product, the basket, checkout, order confirmation, or a named other screen). Audience rules read the screen, for example the product being viewed on pdp_below_buy, so one placement can show different campaigns on different products.
cart_line is keyed: you bind it once per basket line and pass the line’s product id as the key. The SDK evaluates each line separately, so one line can show a substitute while the others show nothing. A substitute decision is valid only on cart_line. Every other placement is bound without a key.
A placement, screen and key together form a screen visit. Events such as eligible and served fire once per campaign and screen visit, not once per redraw. See Events and exposure.
How a placement is filled
Section titled “How a placement is filled”For each placement the SDK walks the campaigns that name it in priority order, highest first:
- Campaigns that are disabled, killed, expired, or whose audience does not match are skipped.
- The first campaign that passes is assigned an arm. A treatment shopper sees it.
- A control or holdout shopper sees nothing from that campaign, and the next campaign in the placement gets its own assignment.
- An offer without a valid grant yields to the next campaign in the same way.
A preview pin puts its campaign first. See Assignment and bucketing and Campaign activation and kill switch.
The configuration also caps how many SDK-rendered components show on one screen at once (1 to 10, set per workspace; 3 when the configuration does not set it). When more slots on a screen have content than the cap allows, the lower-priority ones stay empty.
Empty placements
Section titled “Empty placements”When a placement has nothing to show, its anchor stays in the layout, visible, at zero height. That keeps the control arm measurable and stops your layout from depending on whether Grona has content. The slot view does this on its own. For host-rendered decisions, your app keeps the anchor visible at zero height itself. See Patterns for host-rendered decisions.