Create custom Page block¶
In addition to existing blocks which you can use in a Page, you can also create custom blocks.
To do this, add block configuration in a YAML file, under the ezplatform_page_fieldtype
key,
for example in config/packages/ezplatform_page_builder.yaml
.
The following example shows how to create a block that showcases an event.
Configure block¶
First, add the following YAML configuration:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
event
is the internal name for the block, and name
indicates the name under which the block is available in the interface.
You also set up the category in the Elements panel that the block appears in.
In this case, it doesn't show with the rest of the built-in blocks, but in a separate "Custom" category.
The thumbnail for the block can be one of the pre-existing icons, like in the example above,
or you can use a custom SVG file.
A block can have multiple attributes that you edit when adding it to a Page. In this example, you configure three attributes: name of the event, category it belongs to, and an event Content item that you select and embed.
For a list of all available attribute types, see Page block attributes.
Each attribute can have validators.
The not_blank
validators in the example ensure that the user fills in the two block fields.
The content_type
validator in the example ensure that the user choose a content item of the content type event
.
The regexp
validator ensure that the final value looks like a content ID.
Add block templates¶
A block can have different templates that you select when adding it to a Page.
To configure block templates, add them to block configuration:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Provide the templates in the indicated folder, in this case in templates/themes/<your_theme>/blocks/event
.
For example the featured_template.html.twig
file can look like this:
1 2 3 4 5 6 |
|
The templates have access to all block attributes, as you can see above in the name
, category
and event
variables.
Priority of templates indicates the order in which they are presented in Page Builder. The template with the greatest priority is used as the default one.
Add pre-render event listener¶
If you need to compute variables to pass to the template, you can listen or subscribe to the block pre-render event.
For example, the following event subscriber loads the event
content item and passes it to the template as event_content
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
The block view template could now use ibexa_render(event_content, {'viewType': 'embed'})
instead of render(controller('ibexa_content::viewAction', {'contentId': event, 'viewType': 'embed'}))
, other content Twig functions, or field Twig functions.
For more information, see Block events.
Add edit template¶
You can also customize the template for the block settings modal.
Do this under the configuration_template
key:
1 2 3 4 5 6 7 |
|
Place the edit template in templates/themes/<your_theme>/blocks/event/config.html.twig
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
This example template overrides the embed
attribute widget to customize the Universal Discovery Widget (UDW).
It adds itself to the form_templates
and defines a block_configuration_attribute_embed_widget
block.
The following UDW configuration is used so only an event
typed content item can be selected:
1 2 3 4 5 6 7 8 |
|
For more information, see UDW configuration.
Your custom page block is now ready. Before you can use it in Page Builder, you must enable it in Page field settings.