View source
<?php
namespace Drupal\views\Plugin\views\argument_default;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Cache\CacheableDependencyInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Path\CurrentPathStack;
use Drupal\path_alias\AliasManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class Raw extends ArgumentDefaultPluginBase implements CacheableDependencyInterface {
protected $aliasManager;
protected $currentPath;
public function __construct(array $configuration, $plugin_id, $plugin_definition, AliasManagerInterface $alias_manager, CurrentPathStack $current_path) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->aliasManager = $alias_manager;
$this->currentPath = $current_path;
}
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'));
}
protected function defineOptions() {
$options = parent::defineOptions();
$options['index'] = [
'default' => '',
];
$options['use_alias'] = [
'default' => FALSE,
];
return $options;
}
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'],
'#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.'),
];
}
public function getArgument() {
$path = rtrim($this->currentPath
->getPath($this->view
->getRequest()), '/');
if ($this->options['use_alias']) {
$path = $this->aliasManager
->getAliasByPath($path);
}
$args = explode('/', $path);
array_shift($args);
if (isset($args[$this->options['index']])) {
return $args[$this->options['index']];
}
}
public function getCacheMaxAge() {
return Cache::PERMANENT;
}
public function getCacheContexts() {
return [
'url',
];
}
}