-
Notifications
You must be signed in to change notification settings - Fork 811
Rich Text Editor Blocks v16 Documentation #7305
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 6 commits
0dccd0c
3b6a328
ad98bc1
88bc50f
c288647
0eda20b
75b28bc
1a492c0
0646c6d
e098108
c4bdfa4
4f2a22e
b7e927a
06aae55
9d06059
e8e2e81
02b87f0
6c11f31
94cb712
687852b
244aca1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,208 @@ | ||
| # Blocks | ||
|
|
||
| Blocks enable editors to insert structured content elements directly into the Rich Text Editor. Blocks are [Element Types](../../../../../../data/defining-content/#element-types) and can be configured with custom properties, styling, and behavior. | ||
|
|
||
| Blocks can be added to the Rich Text Editor when: | ||
|
|
||
| * Available Blocks are specified as part of the Rich Text Editor Data Type configuration | ||
| * The **Insert Block** toolbar option is enabled in the Rich Text Editor | ||
|
|
||
|  | ||
|
Check failure on line 10 in 16/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/blocks.md
|
||
|
|
||
| ## Configure Blocks | ||
|
|
||
| Blocks are Element Types that must be created before configuring them as blocks in the Rich Text Editor. You can create Element Types in the **Settings** > **Document Types** section | ||
|
|
||
| Blocks functionality can then be configured through the Rich Text Editor Data Type configuration as follows. | ||
|
|
||
| 1. Navigate to **Settings** > **Data Types**. | ||
| 2. Select your Rich Text Editor Data Type or create a new one. | ||
| 3. In the **Available Blocks** section, add the Element Types you want to make available as blocks. | ||
| 4. Configure each Block Type with the options described below. | ||
eshanrnh marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
|  | ||
|
Check failure on line 23 in 16/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/blocks.md
|
||
|
|
||
| ### Editor Appearance | ||
|
|
||
| Configure how blocks appear and behave in the Content section: | ||
|
|
||
| * **Label** - Define how the block appears in the editor. Umbraco 16 uses UFM (Umbraco Flavored Markdown) syntax for dynamic labels. Use `{=propertyAlias}` to display property values (e.g., `{=author}` for a text property containing the name of an author, or `Written by: {=author}` for a label with static text and dynamic content) | ||
|
Check failure on line 29 in 16/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/blocks.md
|
||
Newnab marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| * **Display Inline** - When enabled, blocks remain inline with surrounding text. When disabled, blocks appear on separate lines | ||
| * **Overlay size** - Set the size of the editing overlay when editors work with the block content | ||
|
|
||
|  | ||
|
Check failure on line 33 in 16/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/blocks.md
|
||
|
|
||
| ### Data Models | ||
|
|
||
| Configure the content structure for your blocks: | ||
|
|
||
| * **Content model** - The Element Type that defines the main content properties for the block (required) | ||
| * **Settings model** - Optional Element Type that defines additional settings or configuration options for the block | ||
|
|
||
|  | ||
|
Check failure on line 42 in 16/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/blocks.md
|
||
|
|
||
| ### Catalogue Appearance | ||
|
|
||
| Control how blocks appear in the block picker: | ||
|
|
||
| * **Background color** - Background color displayed behind the block icon or thumbnail | ||
| * **Icon Color** - Color of the Element Type icon | ||
| * **Thumbnail** - Custom image to replace the default Element Type icon | ||
|
|
||
| ## Working with Blocks | ||
|
|
||
| ### Adding Blocks to Content | ||
|
|
||
| Editors can add blocks to rich text content using the **Insert Block** toolbar button: | ||
|
|
||
| 1. Position the cursor where you want to insert the block | ||
| 2. Click the **Insert Block** button in the Rich Text Editor toolbar | ||
| 3. Select the desired Block from the available options | ||
| 4. Configure the block content (and settings, if provided) | ||
| 5. The block appears in the editor as a structured element | ||
eshanrnh marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
|  | ||
|
|
||
|  | ||
|
|
||
|  | ||
eshanrnh marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| ## Rendering Blocks | ||
|
|
||
| To display blocks on the frontend, create Partial Views for each Block. | ||
|
|
||
| {% hint style="info" %} | ||
| Rich Text Editor blocks use a different view location than Block List blocks. RTE blocks are placed in `Views/Partials/RichText/Components/`, while Block List blocks use `Views/Partials/BlockList/Components/`. | ||
|
Check failure on line 75 in 16/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/blocks.md
|
||
| {% endhint %} | ||
|
|
||
| ### File Structure | ||
|
|
||
| * **Location**: `Views/Partials/RichText/Components/` | ||
| * **Naming**: Use the exact Element Type alias as the filename (e.g., `quoteBlock.cshtml` for alias `quoteBlock`) | ||
| * **Model**: `Umbraco.Cms.Core.Models.Blocks.RichTextBlockItem` | ||
|
|
||
| The different folder structure ensures that RTE blocks and Block List blocks can have separate rendering implementations, even when using the same Element Types. | ||
|
Check failure on line 84 in 16/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/blocks.md
|
||
|
|
||
| {% hint style="warning" %} | ||
| The view filename must match the Element Type alias exactly. If you see the error `ArgumentException: ~/Views/Partials/richtext/Components/[filename].cshtml does not match any available view`, verify that your view filename matches your Element Type alias precisely. | ||
| {% endhint %} | ||
|
|
||
| ### Example Partial View | ||
|
|
||
| For a Block Type with Element Type alias `quoteBlock`: | ||
|
|
||
| ```csharp | ||
| @inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.RichTextBlockItem> | ||
|
|
||
| @{ | ||
| var quoteText = Model.Content.Value("quoteText")?.ToString(); | ||
| var citation = Model.Content.Value("citation")?.ToString(); | ||
| } | ||
|
|
||
| <blockquote class="quote-block"> | ||
| @if (!string.IsNullOrEmpty(quoteText)) | ||
| { | ||
| <p class="quote-text">@Html.Raw(quoteText)</p> | ||
| } | ||
|
|
||
| @if (!string.IsNullOrEmpty(citation)) | ||
| { | ||
| <cite class="quote-citation">@citation</cite> | ||
| } | ||
| </blockquote> | ||
| ``` | ||
|
|
||
| ### Example with Settings Model | ||
|
|
||
| For a Call To Action block with Element Type alias `callToActionBlock` and settings model `callToActionBlockSettings`: | ||
|
|
||
| ```csharp | ||
| @inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.RichTextBlockItem> | ||
| @using Umbraco.Cms.Core.Models | ||
|
|
||
| @{ | ||
| // Get link from Multi URL Picker | ||
| var linkPicker = Model.Content.Value<IEnumerable<Link>>("link"); | ||
| var link = linkPicker?.FirstOrDefault(); | ||
|
|
||
| // Get style from settings (if settings model exists) | ||
| var style = "primary"; // Default style | ||
| if (Model.Settings != null) | ||
| { | ||
| var settingsStyle = Model.Settings.Value("style")?.ToString(); | ||
| if (!string.IsNullOrEmpty(settingsStyle)) | ||
| { | ||
| style = settingsStyle.ToLower(); | ||
| } | ||
| } | ||
|
|
||
| // CSS class based on style setting | ||
| var cssClass = $"cta-button cta-button--{style}"; | ||
| } | ||
|
|
||
| @if (link != null && !string.IsNullOrEmpty(link.Url)) | ||
| { | ||
| <div class="cta-block"> | ||
| <a href="@link.Url" | ||
| class="@cssClass" | ||
| @(link.Target == "_blank" ? Html.Raw("target=\"_blank\" rel=\"noopener noreferrer\"") : Html.Raw(""))> | ||
| @(!string.IsNullOrEmpty(link.Name) ? link.Name : "Learn More") | ||
| </a> | ||
| </div> | ||
| } | ||
| ``` | ||
|
|
||
| ### Type-Safe Rendering with Models Builder | ||
|
|
||
| When using Models Builder, specify the Content and Settings models for type-safe access: | ||
|
|
||
| ```csharp | ||
| @inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.RichTextBlockItem<QuoteBlock, QuoteBlockSettings>> | ||
| @using ContentModels = Umbraco.Cms.Web.Common.PublishedModels; | ||
|
|
||
| @{ | ||
| var style = ""; | ||
| if (Model.Settings?.Color != null) | ||
| { | ||
| style = $"style=\"border-left-color: {Model.Settings.Color};\""; | ||
| } | ||
| } | ||
|
|
||
| <blockquote class="quote-block" @Html.Raw(style)> | ||
| @if (!string.IsNullOrEmpty(Model.Content.QuoteText)) | ||
| { | ||
| <p class="quote-text">@Html.Raw(Model.Content.QuoteText)</p> | ||
| } | ||
|
|
||
| @if (!string.IsNullOrEmpty(Model.Content.Citation)) | ||
| { | ||
| <cite class="quote-citation">@Model.Content.Citation</cite> | ||
| } | ||
| </blockquote> | ||
| ``` | ||
|
|
||
| ## Best Practices | ||
|
|
||
| ### Content Design | ||
|
|
||
| * Design blocks for reusable content patterns | ||
eshanrnh marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| * Keep block content focused on a single purpose | ||
| * Use descriptive labels that help editors understand the block's function | ||
|
|
||
| ### Performance | ||
|
|
||
| * Avoid creating too many Blocks - this can overwhelm content editors | ||
| * Use appropriate caching strategies for block rendering | ||
| * Consider the impact of complex blocks on editor performance | ||
|
|
||
| ### Accessibility | ||
|
|
||
| * Ensure block markup follows accessibility guidelines | ||
| * Provide meaningful labels and descriptions | ||
| * Test block rendering with screen readers | ||
|
|
||
| ## Related Articles | ||
|
|
||
| * [Element Types](../../../../../../data/defining-content/#element-types) | ||
eshanrnh marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| * [Rich Text Editor Configuration](../configuration.md) | ||
| * [Rich Text Editor Extensions](../extensions.md) | ||
eshanrnh marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
Uh oh!
There was an error while loading. Please reload this page.