Widgets on a CMS Content Page

Widgets are only supported by a CMS content page, but you can also add support to any text variables.

Widgets enable you to render any html text generated by your custom PHP code, such as a marketing banner or a contact form.

To register a new widget, you should add a class that extends OroBundleCMSBundleWidgetWidgetInterface and implements the render method that applies argument widget options and returns the generated html text as a string.

Simple scalar values should be used as widget options which can be added by an administrator.

You should register every widget in the service container with the oro_cms.widget tag. Each tag should have a user-friendly alias which is used by an administrator to refer to a certain widget when managing the content that supports widgets.

1
2
3
4
5
6
7
  # AppBundle/Resources/config/services.yml

  acme_demo.contact_us_form:
      class: 'AppBundle\Widget\ContactFormWidget'
      lazy: true
      tags:
          - {name: oro_cms.widget, alias: contact_form}

Then an administrator can use the widget mentioned above in supported blocks with the {{ widget(‘contact_form’, {foo: ‘bar’}) }} placeholder where foo: bar is an option with the value available in the WidgetInterface::render() method.

Note

Mark the widgets as lazy: true to enable their loading only on the pages where they are used.

To support widgets in any text, you should apply the render_content filter in a twig template.

1
 {{ entity.content | render_content }}