Ví dụ: bạn có thể tạo một ViewsArgumentValidator tùy chỉnh và chuyển đổi bí danh đã cho thành ID nút.
<?php
không gian tên Drupal\my_module\Plugin\views\argument_validator;
sử dụng Drupal\path_alias\AliasManagerInterface;
sử dụng Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase;
sử dụng Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Xác thực xem bí danh có phải là bí danh nút hợp lệ hay không và chuyển đổi nó thành nid.
*
* @ViewsArgumentValidator(
* id = "node_alias",
* title = @Translation("Node ID by alias")
* )
*/
lớp NodeAlias mở rộng ArgumentValidatorPluginBase {
/**
* Người quản lý bí danh.
*
* @var \Drupal\path_alias\AliasManagerInterface
*/
$aliasManager được bảo vệ;
/**
* {@inheritdoc}
*/
hàm công khai __construct(mảng $configuration, $plugin_id, $plugin_definition, AliasManagerInterface $alias_manager) {
cha mẹ::__construct($configuration, $plugin_id, $plugin_definition);
$this->aliasManager = $alias_manager;
}
/**
* {@inheritdoc}
*/
tạo hàm tĩnh công khai (ContainerInterface $container, mảng $configuration, $plugin_id, $plugin_definition) {
trả về tĩnh mới (
cấu hình $,
$plugin_id,
$plugin_definition,
$container->get('path_alias.manager'),
);
}
/**
* {@inheritdoc}
*/
hàm công khai validateArgument($argument) {
// Thêm vào trước dấu gạch chéo.
$argument = '/' . ltrim($argument, '/');
$path = $this->aliasManager->getPathByAlias($argument);
if (preg_match('/node\/(\d+)/', $path, $matches)) {
$this->argument->argument = $matches[1];
trả về ĐÚNG;
}
trả về SAI;
}
}
bên trong xác thực đối số chức năng chúng tôi đang kiểm tra xem có thể tìm thấy đường dẫn nội bộ cho một nút với bí danh đó hay không và chuyển đổi đối số đã cho thành ID nút tương ứng.
Thêm tệp này có tên NodeAlias.php cho bạn mô-đun tùy chỉnh trong src/Plugin/lượt xem/argument_validator thư mục và xóa bộ nhớ cache.
Sau đó, bạn có thể sử dụng Nội dung: Nid bộ lọc theo ngữ cảnh và chọn trong phần "Khi giá trị bộ lọc nằm trong URL hoặc giá trị mặc định được cung cấp" thì Trình xác thực mới ID nút theo bí danh.