aliasManager = $alias_manager; $this->currentPath = $current_path; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('path.alias_manager'), $container->get('path.current') ); } /** * {@inheritdoc} */ protected function defineOptions() { $options = parent::defineOptions(); $options['index'] = ['default' => '']; $options['use_alias'] = ['default' => FALSE]; return $options; } /** * {@inheritdoc} */ public function buildOptionsForm(&$form, FormStateInterface $form_state) { parent::buildOptionsForm($form, $form_state); $form['index'] = [ '#type' => 'select', '#title' => $this->t('Path component'), '#default_value' => $this->options['index'], // range(1, 10) returns an array with: // - keys that count from 0 to match PHP array keys from explode(). // - values that count from 1 for display to humans. '#options' => range(1, 10), '#description' => $this->t('The numbering starts from 1, e.g. on the page admin/structure/types, the 3rd path component is "types".'), ]; $form['use_alias'] = [ '#type' => 'checkbox', '#title' => $this->t('Use path alias'), '#default_value' => $this->options['use_alias'], '#description' => $this->t('Use path alias instead of internal path.'), ]; } /** * {@inheritdoc} */ public function getArgument() { // Don't trim the leading slash since getAliasByPath() requires it. $path = rtrim($this->currentPath->getPath($this->view->getRequest()), '/'); if ($this->options['use_alias']) { $path = $this->aliasManager->getAliasByPath($path); } $args = explode('/', $path); // Drop the empty first element created by the leading slash since the path // component index doesn't take it into account. array_shift($args); if (isset($args[$this->options['index']])) { return $args[$this->options['index']]; } } /** * {@inheritdoc} */ public function getCacheMaxAge() { return Cache::PERMANENT; } /** * {@inheritdoc} */ public function getCacheContexts() { return ['url']; } }