From 3168f18b6c4d7e78a33f318c3bd0243458feede8 Mon Sep 17 00:00:00 2001 From: Kyle Huynh Date: Fri, 17 Sep 2021 00:55:40 -0400 Subject: [PATCH] Add a simple search block associated with an Advanced Search View Page --- src/Form/SearchForm.php | 66 +++++++++++++++++++++++ src/Plugin/Block/SearchBlock.php | 90 ++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 src/Form/SearchForm.php create mode 100644 src/Plugin/Block/SearchBlock.php diff --git a/src/Form/SearchForm.php b/src/Form/SearchForm.php new file mode 100644 index 0000000..f51f8d9 --- /dev/null +++ b/src/Form/SearchForm.php @@ -0,0 +1,66 @@ +get('settings'); + $view_machine_name = $settings['search_view_machine_name']; + + } + $form['search-textfield'] = array( + '#type' => 'textfield', + '#title' => (!empty($settings['search_textfield_label']) ? $settings['search_textfield_label'] : ''), + '#attributes' => ['placeholder' => $settings['search_placeholder']] + ); + + $form['actions']['#type'] = 'actions'; + $form['actions']['submit'] = array( + '#type' => 'submit', + '#value' => (!empty($settings['search_submit_label']) ? $settings['search_submit_label'] : 'Search'), + '#button_type' => 'primary', + ); + return $form; + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, FormStateInterface $form_state) + { + $block = \Drupal\block\Entity\Block::load("search"); + if ($block) { + $settings = $block->get('settings'); + $view_machine_name = $settings['search_view_machine_name']; + } + $url = Url::fromRoute($view_machine_name, [ + 'a[0][f]' => 'all', + 'a[0][i]' => 'IS', + 'a[0][v]' => $form_state->getValues()['search-textfield'], + + ]); + $form_state->setRedirectUrl($url); + } +} diff --git a/src/Plugin/Block/SearchBlock.php b/src/Plugin/Block/SearchBlock.php new file mode 100644 index 0000000..5f369d9 --- /dev/null +++ b/src/Plugin/Block/SearchBlock.php @@ -0,0 +1,90 @@ + 'fieldset', + '#title' => $this->t('Configure Search Block'), + ]; + $views = \Drupal::EntityTypeManager()->getStorage('view')->loadMultiple(); + $options = []; + foreach ($views as $view_name => $view) { + $displays = $view->get("display"); + foreach ($displays as $display) { + if ($display['display_plugin'] === "page") { + $options["view.$view_name". "." . $display['id']] = "view.$view_name". "." . $display['id']; + } + } + } + $form['search-attributes']['view_machine_name'] = [ + '#type' => 'select', + '#title' => $this->t('Select Search Results Page\'s Machine Name:'), + '#default_value' => $this->configuration['search_view_machine_name'], + '#options' => $options + ]; + $form['search-attributes']['search_textfield'] = [ + '#type' => 'textfield', + '#title' => $this->t('Search Keyword Textfield Label:'), + '#default_value' => $this->configuration['search_textfield_label'], + '#maxlength' => 255, + ]; + $form['search-attributes']['search_placeholder_textfield'] = [ + '#type' => 'textfield', + '#title' => $this->t('Search Keyword Textfield Placeholder:'), + '#default_value' => $this->configuration['search_placeholder'], + '#maxlength' => 255, + ]; + + $form['search-attributes']['search_submit'] = [ + '#type' => 'textfield', + '#title' => $this->t('Search Button Label:'), + '#default_value' => $this->configuration['search_submit_label'], + '#maxlength' => 255, + ]; + + return $form; + } + + /** + * {@inheritdoc} + */ + public function blockSubmit($form, FormStateInterface $form_state) { + $this->configuration['search_view_machine_name'] = $form_state->getValues()['search-attributes']['view_machine_name']; + $this->configuration['search_textfield_label'] = $form_state->getValues()['search-attributes']['search_textfield']; + $this->configuration['search_placeholder'] = $form_state->getValues()['search-attributes']['search_placeholder_textfield']; + $this->configuration['search_submit_label'] = $form_state->getValues()['search-attributes']['search_submit']; + } + + /** + * {@inheritdoc} + */ + public function build() { + return \Drupal::formBuilder()->getForm('Drupal\islandora_advanced_search\Form\SearchForm'); + } + +}