You are here

class Actions in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/lib/Drupal/Core/Render/Element/Actions.php \Drupal\Core\Render\Element\Actions

Provides a wrapper element to group one or more buttons in a form.

Use of a single Actions element with an array key of 'actions' to group the primary submit buttons on a form helps to ensure proper styling in themes, and enables other modules to properly alter a form's actions.

Usage example:

$form['actions'] = array(
  '#type' => 'actions',
);
$form['actions']['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Save'),
);

Plugin annotation

@RenderElement("actions");

Hierarchy

Expanded class hierarchy of Actions

4 string references to 'Actions'
action.info.yml in core/modules/action/action.info.yml
core/modules/action/action.info.yml
action.links.menu.yml in core/modules/action/action.links.menu.yml
core/modules/action/action.links.menu.yml
action.routing.yml in core/modules/action/action.routing.yml
core/modules/action/action.routing.yml
SimpletestResultsForm::buildForm in core/modules/simpletest/src/Form/SimpletestResultsForm.php
Form constructor.
57 #type uses of Actions
ActionAdminManageForm::buildForm in core/modules/action/src/Form/ActionAdminManageForm.php
Form constructor.
AjaxFormBlock::buildForm in core/modules/system/tests/modules/ajax_forms_test/src/Plugin/Block/AjaxFormBlock.php
Form constructor.
AjaxTestForm::buildForm in core/modules/system/tests/modules/ajax_test/src/Form/AjaxTestForm.php
Form constructor.
BanAdmin::buildForm in core/modules/ban/src/Form/BanAdmin.php
BlockContentTypeForm::form in core/modules/block_content/src/BlockContentTypeForm.php
Gets the actual form array to be built.

... See full list

File

core/lib/Drupal/Core/Render/Element/Actions.php, line 31
Contains \Drupal\Core\Render\Element\Actions.

Namespace

Drupal\Core\Render\Element
View source
class Actions extends Container {

  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    $class = get_class($this);
    return array(
      '#process' => array(
        // @todo Move this to #pre_render.
        array(
          $class,
          'preRenderActionsDropbutton',
        ),
        array(
          $class,
          'processActions',
        ),
        array(
          $class,
          'processContainer',
        ),
      ),
      '#weight' => 100,
      '#theme_wrappers' => array(
        'container',
      ),
    );
  }

  /**
   * Processes a form actions container element.
   *
   * @param array $element
   *   An associative array containing the properties and children of the
   *   form actions container.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   * @param array $complete_form
   *   The complete form structure.
   *
   * @return array
   *   The processed element.
   */
  public static function processActions(&$element, FormStateInterface $form_state, &$complete_form) {
    $element['#attributes']['class'][] = 'form-actions';
    return $element;
  }

  /**
   * #pre_render callback for #type 'actions'.
   *
   * This callback iterates over all child elements of the #type 'actions'
   * container to look for elements with a #dropbutton property, so as to group
   * those elements into dropbuttons. As such, it works similar to #group, but is
   * specialized for dropbuttons.
   *
   * The value of #dropbutton denotes the dropbutton to group the child element
   * into. For example, two different values of 'foo' and 'bar' on child elements
   * would generate two separate dropbuttons, which each contain the corresponding
   * buttons.
   *
   * @param array $element
   *   The #type 'actions' element to process.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   * @param array $complete_form
   *   The complete form structure.
   *
   * @return array
   *   The processed #type 'actions' element, including individual buttons grouped
   *   into new #type 'dropbutton' elements.
   */
  public static function preRenderActionsDropbutton(&$element, FormStateInterface $form_state, &$complete_form) {
    $dropbuttons = array();
    foreach (Element::children($element, TRUE) as $key) {
      if (isset($element[$key]['#dropbutton'])) {
        $dropbutton = $element[$key]['#dropbutton'];

        // If there is no dropbutton for this button group yet, create one.
        if (!isset($dropbuttons[$dropbutton])) {
          $dropbuttons[$dropbutton] = array(
            '#type' => 'dropbutton',
          );
        }

        // Add this button to the corresponding dropbutton.
        // @todo Change #type 'dropbutton' to be based on item-list.html.twig
        //   instead of links.html.twig to avoid this preemptive rendering.
        $button = \Drupal::service('renderer')
          ->renderPlain($element[$key]);
        $dropbuttons[$dropbutton]['#links'][$key] = array(
          'title' => $button,
        );
      }
    }

    // @todo For now, all dropbuttons appear first. Consider to invent a more
    //   fancy sorting/injection algorithm here.
    return $dropbuttons + $element;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Actions::getInfo public function Returns the element properties for this element. Overrides Container::getInfo
Actions::preRenderActionsDropbutton public static function #pre_render callback for #type 'actions'.
Actions::processActions public static function Processes a form actions container element.
Container::processContainer public static function Processes a container element.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
PluginBase::$configuration protected property Configuration information passed into the plugin. 2
PluginBase::$pluginDefinition protected property The plugin implementation definition.
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::__construct public function Constructs a Drupal\Component\Plugin\PluginBase object. 69
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.
RenderElement::processGroup public static function Arranges elements into groups.
RenderElement::setAttributes public static function Sets a form element's class attribute. Overrides ElementInterface::setAttributes
StringTranslationTrait::$stringTranslation protected property The string translation service.
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.