uikit_components-8.x-3.1/src/Form/MenuEditForm.php

src/Form/MenuEditForm.php
<?php

namespace Drupal\uikit_components\Form;

use Drupal\Core\Form\FormStateInterface;
use Drupal\menu_ui\MenuForm;
use Drupal\uikit_components\UIkitComponents;

/**
 * Extends the MenuForm form builder for the menu edit forms.
 */
class MenuEditForm extends MenuForm {

  /**
   * {@inheritdoc}
   */
  public function form(array $form, FormStateInterface $form_state) {
    $form = parent::form($form, $form_state);

    $t_args = [
      ':list' => UIkitComponents::getComponentURL('list'),
      ':nav' => UIkitComponents::getComponentURL('nav'),
      ':subnav' => UIkitComponents::getComponentURL('subnav'),
      ':width' => UIkitComponents::getComponentURL('width'),
    ];

    $description_links = [
      $this->t('<a href=":list" target="_blank">List</a>', $t_args),
      $this->t('<a href=":nav" target="_blank">Nav</a>', $t_args),
      $this->t('<a href=":subnav" target="_blank">Subnav</a>', $t_args),
    ];

    $links = [
      '#markup' => implode(', ', $description_links)
    ];

    $width_classes = UIkitComponents::getNavWidthClasses($this->entity->id()) ? UIkitComponents::getNavWidthClasses($this->entity->id()) : '';

    $form['label']['#weight'] = -10;
    $form['id']['#weight'] = -9;
    $form['description']['#weight'] = -8;

    $form['menu_style'] = [
      '#type' => 'select',
      '#title' => $this->t('UIkit menu style'),
      '#description' => $this->t('<p>Select the UIkit component to set a default style for the menu. Some options will provide additional settings. Examples: @examples</p>', ['@examples' => \Drupal::service('renderer')->render($links)]),
      '#options' => [
        $this->t('List')->render() => [
          'uk-list' => $this->t('Default list'),
          'uk-list-bullet' => $this->t('Bullet list'),
          'uk-list-divider' => $this->t('Divided list'),
          'uk-list-striped' => $this->t('Striped list'),
        ],
        'uk-nav' => $this->t('Nav'),
        $this->t('Subnav')->render() => [
          'uk-subnav' => $this->t('Default subnav'),
          'uk-subnav-divider' => $this->t('Divided subnav'),
          'uk-subnav-pill' => $this->t('Pill subnav'),
        ],
      ],
      '#empty_value' => '',
      '#default_value' => UIkitComponents::getMenuStyle($this->entity->id()),
      '#weight' => -7,
    ];

    $form['menu_style_list_large'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Large modifier'),
      '#description' => $this->t('Check to increase the spacing between list items.'),
      '#default_value' => UIkitComponents::getLargeList($this->entity->id()),
      '#weight' => -6,
      '#states' => [
        'visible' => [
          [':input[name="menu_style"]' => ['value' => 'uk-list']],
          'or',
          [':input[name="menu_style"]' => ['value' => 'uk-list-bullet']],
          'or',
          [':input[name="menu_style"]' => ['value' => 'uk-list-divider']],
          'or',
          [':input[name="menu_style"]' => ['value' => 'uk-list-striped']],
        ],
      ],
    ];

    $form['menu_style_nav_style_modifiers'] = [
      '#type' => 'select',
      '#title' => $this->t('Nav style modifiers'),
      '#description' => $this->t('Select which nav style to use.'),
      '#options' => [
        'uk-nav-default' => $this->t('Default'),
        'uk-nav-primary' => $this->t('Primary'),
      ],
      '#empty_value' => '',
      '#default_value' => UIkitComponents::getNavStyleModifier($this->entity->id()),
      '#weight' => -5,
      '#states' => [
        'visible' => [
          [':input[name="menu_style"]' => ['value' => 'uk-nav']],
        ],
      ],
    ];

    $form['menu_style_nav_center_modifier'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Nav center modifier'),
      '#description' => $this->t('Select to center nav items.'),
      '#default_value' => UIkitComponents::getNavCenterModifier($this->entity->id()),
      '#weight' => -3,
      '#states' => [
        'visible' => [
          [':input[name="menu_style"]' => ['value' => 'uk-nav']],
        ],
      ],
    ];

    $form['menu_style_wrapper_widths'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Menu wrapper width classes'),
      '#description' => $this->t('Enter the <a href=":width" target="_blank">width classes</a>, separated with a space, to wrap the menu in.', $t_args),
      '#default_value' => $width_classes,
      '#weight' => -2,
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    parent::submitForm($form, $form_state);
    UIkitComponents::setMenuStyle($this->entity->id(), $form_state->getValue('menu_style'));
    UIkitComponents::setLargeList($this->entity->id(), $form_state->getValue('menu_style_list_large'));
    UIkitComponents::setNavStyleModifier($this->entity->id(), $form_state->getValue('menu_style_nav_style_modifiers'));
    UIkitComponents::setNavCenterModifier($this->entity->id(), $form_state->getValue('menu_style_nav_center_modifier'));
    UIkitComponents::setNavWidthClasses($this->entity->id(), $form_state->getValue('menu_style_wrapper_widths'));

    // For good measure, flush all cache.
    drupal_flush_all_caches();
  }

}

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

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