acquia_dam-1.0.0-rc1/src/Element/WidenCategories.php

src/Element/WidenCategories.php
<?php

namespace Drupal\acquia_dam\Element;

use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element\FormElement;
use Drupal\Core\Render\Markup;

/**
 * Provides widen category form element.
 *
 * @FormElement("widen_categories")
 */
class WidenCategories extends FormElement {

  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    return [
      '#input' => TRUE,
      '#process' => [
        [self::class, 'preRender'],
      ],
      '#theme_wrappers' => ['form_element'],
    ];
  }

  /**
   * Renders an element for widen category filter.
   *
   * @param array $element
   *   Element array.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   *
   * @return array
   *   Render array for category filter.
   */
  public static function preRender(array $element, FormStateInterface $form_state): array {
    $input_field = [
      '#type' => 'textfield',
      '#id' => $element['#id'],
      '#wrapper_attributes' => [
        'class' => [
          'widen-categories-category-select',
        ],
      ],
      '#placeholder' => t('Select category'),
      '#attributes' => [
        'readonly' => TRUE,
        'class' => [
          'form-element--type-select',
        ],
      ],
    ];
    $element['container'] = [
      '#type' => 'container',
      '#prefix' => Markup::create('<widen-categories>'),
      '#suffix' => Markup::create('</widen-categories>'),
      '#attached' => [
        'library' => ['acquia_dam/acquia_dam.widen_categories'],
      ],
      'placeholder' => $input_field,
      'category_path' => [
        '#type' => 'hidden',
        '#name' => $element['#name'],
        // Hidden values cannot receive input from form state, it's always lost.
        '#value' => NestedArray::getValue($form_state->getUserInput(), $element['#array_parents']),
      ],
    ];
    $element['#tree'] = FALSE;

    return $element;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc