You are here

public function SearchApiPageBlockForm::buildForm in Search API Pages 8

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

src/Form/SearchApiPageBlockForm.php, line 104

Class

SearchApiPageBlockForm
Builds the search form for the search api page block.

Namespace

Drupal\search_api_page\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, $args = []) {

  /* @var $search_api_page \Drupal\search_api_page\SearchApiPageInterface */
  $search_api_page = $this->pageStorage
    ->load($this->pageId);
  $langcode = $this->languageManager
    ->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
    ->getId();
  $form['search_api_page'] = [
    '#type' => 'value',
    '#value' => $search_api_page
      ->id(),
  ];
  $default_value = '';
  if (isset($args['keys'])) {
    $default_value = $args['keys'];
  }
  if ($default_value === '') {
    $request = $this
      ->getRequest();
    if (trim($search_api_page
      ->getPath(), '/') === trim($request
      ->getPathInfo(), '/')) {
      $default_value = $this
        ->getRequest()
        ->get('keys');
    }
  }
  $keys_title = $this
    ->t('Enter the terms you wish to search for.', [], [
    'langcode' => $langcode,
  ]);
  $form['keys'] = [
    '#type' => 'search',
    '#title' => $this
      ->t('Search', [], [
      'langcode' => $langcode,
    ]),
    '#title_display' => 'invisible',
    '#size' => 15,
    '#default_value' => $default_value,
    '#attributes' => [
      'title' => $keys_title,
    ],
  ];
  $form['actions'] = [
    '#type' => 'actions',
  ];
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Search', [], [
      'langcode' => $langcode,
    ]),
  ];
  if (!$search_api_page
    ->getCleanUrl()) {
    $route = 'search_api_page.' . $langcode . '.' . $search_api_page
      ->id();
    $form['#action'] = Url::fromRoute($route)
      ->toString();
    $form['#method'] = 'get';
    $form['actions']['submit']['#name'] = '';
  }

  // Dependency on search api config entity.
  $this->renderer
    ->addCacheableDependency($form, $search_api_page
    ->getConfigDependencyName());
  $this->renderer
    ->addCacheableDependency($form, $langcode);

  // Match the search form styling of Drupal core.
  $form['#attributes']['class'][] = 'search-form';
  $form['#attributes']['class'][] = 'search-block-form';
  $form['#attributes']['class'][] = 'container-inline';
  $form['actions']['submit']['#attributes']['class'][] = 'search-form__submit';
  return $form;
}