Skip to content

[6.x] Add field references + deletion blockers#19014

Open
riasvdv wants to merge 2 commits into
feature/markdown-fieldfrom
feature/field-references
Open

[6.x] Add field references + deletion blockers#19014
riasvdv wants to merge 2 commits into
feature/markdown-fieldfrom
feature/field-references

Conversation

@riasvdv
Copy link
Copy Markdown
Contributor

@riasvdv riasvdv commented Jun 1, 2026

Description

This brings the field references & deletion blocker that was added to CKEditor into the core.

This introduces a new fieldreferences table, a TracksReferencesFieldInterface marker contract, field lifecycle listeners that keep tracked references in sync, and a generic deletion blocker/replacement flow for referenced elements.

The Markdown field now opts-in to this system, so element reference tags in Markdown content can block deletion and be replaced through the delete-elements flow.

Plugin developers can add reference tracking to custom fields by:

  1. Implementing the CraftCms\Cms\Field\Contracts\TracksReferencesFieldInterface marker interface.
  2. Ensuring serializeValue() returns the raw serialized field content that should be scanned for element reference tags. (This should already be the case for almost all custom fields)
  3. Ensuring the serialized value can be passed back through setFieldValue() / normalization after numeric reference IDs are replaced. (Should also already be the case for all custom fields)

When tracked references are replaced, Craft updates the serialized field value and saves the source element without validation; the normal field save lifecycle then refreshes fieldreferences.

Existing content is not backfilled automatically. Sites should resave elements containing tracking-enabled fields to populate reference rows.

@riasvdv riasvdv marked this pull request as ready for review June 1, 2026 18:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant