'']; $options['fallback'] = ['default' => '']; $options['multiple'] = ['default' => 'and']; return $options; } /** * {@inheritdoc} */ public function buildOptionsForm(&$form, FormStateInterface $form_state) { parent::buildOptionsForm($form, $form_state); $form['query_param'] = [ '#type' => 'textfield', '#title' => $this->t('Query parameter'), '#description' => $this->t('The query parameter to use.'), '#default_value' => $this->options['query_param'], ]; $form['fallback'] = [ '#type' => 'textfield', '#title' => $this->t('Fallback value'), '#description' => $this->t('The fallback value to use when the above query parameter is not present.'), '#default_value' => $this->options['fallback'], ]; $form['multiple'] = [ '#type' => 'radios', '#title' => $this->t('Multiple values'), '#description' => $this->t('Conjunction to use when handling multiple values. E.g. "?value[0]=a&value[1]=b".'), '#default_value' => $this->options['multiple'], '#options' => [ 'and' => $this->t('AND'), 'or' => $this->t('OR'), ], ]; } /** * {@inheritdoc} */ public function getArgument() { $current_request = $this->view->getRequest(); if ($current_request->query->has($this->options['query_param'])) { $param = $current_request->query->get($this->options['query_param']); if (is_array($param)) { $conjunction = ($this->options['multiple'] == 'and') ? ',' : '+'; $param = implode($conjunction, $param); } return $param; } else { // Otherwise, use the fixed fallback value. return $this->options['fallback']; } } /** * {@inheritdoc} */ public function getCacheMaxAge() { return Cache::PERMANENT; } /** * {@inheritdoc} */ public function getCacheContexts() { return ['url']; } }