class Marquee
Same name in other branches
- 3.x modules/render_example/src/Element/Marquee.php \Drupal\render_example\Element\Marquee
- 8.x-1.x 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\RenderElementBase, 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\Component\Plugin\PluginBase implements \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
- class \Drupal\Core\Render\Element\RenderElementBase extends \Drupal\Core\Plugin\PluginBase implements \Drupal\Core\Render\Element\ElementInterface
- class \Drupal\render_example\Element\Marquee extends \Drupal\Core\Render\Element\RenderElementBase
- class \Drupal\Core\Render\Element\RenderElementBase extends \Drupal\Core\Plugin\PluginBase implements \Drupal\Core\Render\Element\ElementInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
Expanded class hierarchy of Marquee
See also
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\ElementView source
class Marquee extends RenderElementBase {
/**
* {@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 | |
RenderElementBase::preRenderAjaxForm | public static | function | Adds Ajax information about an element to communicate with JavaScript. | 2 | |
RenderElementBase::preRenderGroup | public static | function | Adds members of this group as actual elements for rendering. | 2 | |
RenderElementBase::processAjaxForm | public static | function | Form element processing handler for the #ajax form property. | 3 | |
RenderElementBase::processGroup | public static | function | Arranges elements into groups. | 2 | |
RenderElementBase::setAttributes | public static | function | Sets a form element's class attribute. | Overrides ElementInterface::setAttributes | 2 |