class Marquee

Same name in other branches
  1. 3.x modules/render_example/src/Element/Marquee.php \Drupal\render_example\Element\Marquee
  2. 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

  • class \Drupal\render_example\Element\Marquee extends \Drupal\Core\Render\Element\RenderElement

Expanded class hierarchy of Marquee

See also

plugin_api

render_example_theme()

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

File

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
Marquee::getInfo public function
Marquee::preRenderMarquee public static function Pre-render callback; Process custom attribute options.