Chris@0: keywords = (string) $keywords; Chris@0: $this->searchParameters = $parameters; Chris@0: $this->searchAttributes = $attributes; Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getKeywords() { Chris@0: return $this->keywords; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getParameters() { Chris@0: return $this->searchParameters; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getAttributes() { Chris@0: return $this->searchAttributes; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function isSearchExecutable() { Chris@0: // Default implementation suitable for plugins that only use keywords. Chris@0: return !empty($this->keywords); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getType() { Chris@0: return NULL; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function buildResults() { Chris@0: $results = $this->execute(); Chris@0: Chris@0: $built = []; Chris@0: foreach ($results as $result) { Chris@0: $built[] = [ Chris@0: '#theme' => 'search_result', Chris@0: '#result' => $result, Chris@0: '#plugin_id' => $this->getPluginId(), Chris@0: ]; Chris@0: } Chris@0: Chris@0: return $built; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function searchFormAlter(array &$form, FormStateInterface $form_state) { Chris@0: // Empty default implementation. Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function suggestedTitle() { Chris@0: // If the user entered a search string, truncate it and append it to the Chris@0: // title. Chris@0: if (!empty($this->keywords)) { Chris@0: return $this->t('Search for @keywords', ['@keywords' => Unicode::truncate($this->keywords, 60, TRUE, TRUE)]); Chris@0: } Chris@0: // Use the default 'Search' title. Chris@0: return $this->t('Search'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function buildSearchUrlQuery(FormStateInterface $form_state) { Chris@0: // Grab the keywords entered in the form and put them as 'keys' in the GET. Chris@0: $keys = trim($form_state->getValue('keys')); Chris@0: $query = ['keys' => $keys]; Chris@0: Chris@0: return $query; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getHelp() { Chris@0: // This default search help is appropriate for plugins like NodeSearch Chris@0: // that use the SearchQuery class. Chris@0: $help = [ Chris@0: 'list' => [ Chris@0: '#theme' => 'item_list', Chris@0: '#items' => [ Chris@0: $this->t('Search looks for exact, case-insensitive keywords; keywords shorter than a minimum length are ignored.'), Chris@0: $this->t('Use upper-case OR to get more results. Example: cat OR dog (content contains either "cat" or "dog").'), Chris@0: $this->t('You can use upper-case AND to require all words, but this is the same as the default behavior. Example: cat AND dog (same as cat dog, content must contain both "cat" and "dog").'), Chris@0: $this->t('Use quotes to search for a phrase. Example: "the cat eats mice".'), Chris@0: $this->t('You can precede keywords by - to exclude them; you must still have at least one "positive" keyword. Example: cat -dog (content must contain cat and cannot contain dog).'), Chris@0: ], Chris@0: ], Chris@0: ]; Chris@0: Chris@0: return $help; Chris@0: } Chris@0: Chris@0: }