class Marquee

Same name and namespace in other branches
  1. 4.0.x modules/render_example/src/Element/Marquee.php \Drupal\render_example\Element\Marquee

Provides a marquee render element.

New render element types are defined as plugins. They live in the Drupal\{module_name}\Element namespace and implement \Drupal\Core\Render\Element\ElementInterface. They are annotated with either \Drupal\Core\Render\Annotation\RenderElement or \Drupal\Core\Render\Annotation\FormElement. And extend either the \Drupal\Core\Render\Element\RenderElement, or \Drupal\Core\Render\Element\FormElement base classes.

In the annotation below we define the string "marquee" as the ID for this plugin. That will also be the value used for the '#type' property in a render array. For example:

$build['awesome'] = [
    '#type' => 'marquee',
    '#content' => 'Whoa cools, a marquee!',
];

View an example of this custom element in use in \Drupal\render_example\Controller\RenderExampleController::arrays().

Plugin annotation

@RenderElement("marquee");

Hierarchy

Expanded class hierarchy of Marquee

See also

Plugin API

render_example_theme()

1 #type use of Marquee
RenderExampleController::arrays in modules/render_example/src/Controller/RenderExampleController.php
Examples of defining content using renderable arrays.

File

modules/render_example/src/Element/Marquee.php, line 37

Namespace

Drupal\render_example\Element
View source
class Marquee extends RenderElement {
    
    /**
     * {@inheritdoc}
     */
    public function getInfo() {
        // Returns an array of default properties that will be merged with any
        // properties defined in a render array when using this element type.
        // You can use any standard render array property here, and you can also
        // custom properties that are specific to your new element type.
        return [
            // See render_example_theme() where this new theme hook is declared.
'#theme' => 'render_example_marquee',
            // Define a default #pre_render method. We will use this to handle
            // additional processing for the custom attributes we add below.
'#pre_render' => [
                [
                    self::class,
                    'preRenderMarquee',
                ],
            ],
            // This is a custom property for our element type. We set it to blank by
            // default. The expectation is that a user will add the content that they
            // would like to see inside the marquee tag. This custom property is
            // accounted for in the associated template file.
'#content' => '',
            '#attributes' => [
                'direction' => 'left',
                'loop' => -1,
                'scrollamount' => 'random',
            ],
        ];
    }
    
    /**
     * Pre-render callback; Process custom attribute options.
     *
     * @param array $element
     *   The renderable array representing the element with '#type' => 'marquee'
     *   property set.
     *
     * @return array
     *   The passed in element with changes made to attributes depending on
     *   context.
     */
    public static function preRenderMarquee(array $element) {
        // Normal attributes for a <marquee> tag do not include a 'random' option
        // for scroll amount. Our marquee element type does though. So we use this
        // #pre_render callback to check if the element was defined with the value
        // 'random' for the scrollamount attribute, and if so replace the string
        // with a random number.
        if ($element['#attributes']['scrollamount'] == 'random') {
            $element['#attributes']['scrollamount'] = abs(rand(1, 50));
        }
        return $element;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
Marquee::getInfo public function Returns the element properties for this element. Overrides ElementInterface::getInfo
Marquee::preRenderMarquee public static function Pre-render callback; Process custom attribute options.
PluginInspectionInterface::getPluginDefinition public function Gets the definition of the plugin implementation. 6
PluginInspectionInterface::getPluginId public function Gets the plugin_id of the plugin instance. 2
RenderElement::preRenderAjaxForm public static function Adds Ajax information about an element to communicate with JavaScript.
RenderElement::preRenderGroup public static function Adds members of this group as actual elements for rendering.
RenderElement::processAjaxForm public static function Form element processing handler for the #ajax form property. 1
RenderElement::processGroup public static function Arranges elements into groups.
RenderElement::setAttributes public static function Sets a form element&#039;s class attribute. Overrides ElementInterface::setAttributes