Back to Glossary
Templates & Automation

Placeholder

Definition

A block that has been designated as an editable content slot in a template. When an Adopter opens a template, placeholder blocks are the only elements they can interact with. Everything else is locked. A placeholder defines not just which block is editable, but also the exact ways it can be edited, controlled by the scopes the Creator configured on it.

Placeholders are the mechanism that makes templates safe for non-designers: the Creator controls the design; the Adopter fills in the content.

Two Components of a Placeholder

Placeholder Behavior

Enables the block as an interactive content slot for Adopters. For graphic blocks (images, videos) this is enabled on the fill. For text blocks, it is enabled on the block itself.

Placeholder Controls

The visual affordances shown to Adopters: an overlay pattern indicating the slot is empty or replaceable, and a Replace button for guided interaction. Both are configured on the block regardless of type.

The “Act as Placeholder” checkbox in the CE.SDK editor UI enables both components simultaneously and is the recommended approach when authoring templates visually.

How to Create a Placeholder in the Editor

Open the scene with the Creator role active

Only Creators can configure placeholder behavior. Placeholder settings are not available in Adopter or Viewer role.

Select the block to designate as a placeholder

An image block, video block, or text block. The configuration differs slightly between graphic blocks and text blocks.

Open the Placeholder settings panel and check “Act as Placeholder”

This enables both placeholder behavior and the visual controls in one step: the dotted overlay pattern and the Replace button will both appear for Adopters.

Configure the constraints

Choose which scopes to permit for Adopters: allowing image replacement but not repositioning, or allowing text editing but not font changes, for example.

Save the scene

The block is now a placeholder. An Adopter opening this template will see the Replace button and can interact with it within the defined constraints. No additional setup is needed at load time.

How to Create a Placeholder Programmatically

Check whether the block supports placeholder behavior

Confirm the block type before attempting to enable placeholder behavior: graphic blocks and text blocks use different targets.

For graphic blocks: enable placeholder behavior on the fill

This is the critical implementation detail. Placeholder behavior for graphic blocks must be enabled on the fill object, not the block itself. Enabling it on the block has no effect.

Enable the visual controls on the block

Turn on both the overlay pattern and the Replace button separately. Both must be enabled for Adopters to see the visual affordance.

Configure scopes on the block

Define what the Adopter is permitted to do. For text blocks, placeholder behavior is enabled directly on the block rather than its fill. The scope configuration follows the same pattern.

In practice, enabling the relevant scopes on a block (such as allowing fill replacement for a graphic block or text editing for a text block) automatically enables placeholder interaction. Disabling all scopes on a block automatically disables placeholder interaction. This means scope configuration is often sufficient without calling the placeholder behavior APIs directly.

Placeholders vs. Variables

Placeholders

Handle interactive content slots where Adopters manually replace images, videos, or text through the editor. The content originates from a human decision at edit time: a personal message, a custom photo, a locally relevant headline.

Variables

Handle dynamic text content populated from data (names, dates, prices, addresses) injected programmatically via the Variable API. The content originates from a structured data source, not from a user typing into the editor.

Both can coexist in the same template. A postcard template might have image placeholders that the Adopter swaps manually, and text variables that the platform injects automatically from CRM data.