ตัวอย่างเช่น คุณสามารถสร้าง ViewsArgumentValidator ที่กำหนดเองและแปลงนามแฝงที่กำหนดเป็น Node ID
<?php
เนมสเปซ Drupal\my_module\Plugin\views\argument_validator;
ใช้ Drupal\path_alias\AliasManagerInterface;
ใช้ Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase
ใช้ Symfony\Component\DependencyInjection\ContainerInterface;
/**
* ตรวจสอบว่านามแฝงเป็นนามแฝงของโหนดที่ถูกต้องหรือไม่ และแปลงเป็น nid
*
* @ViewsArgumentValidator(
* id = "node_alias",
* title = @Translation("รหัสโหนดตามนามแฝง")
* )
*/
คลาส NodeAlias ขยาย ArgumentValidatorPluginBase {
/**
* ผู้จัดการนามแฝง
*
* @var \Drupal\path_alias\AliasManagerInterface
*/
ป้องกัน $aliasManager;
/**
* {@inheritdoc}
*/
ฟังก์ชันสาธารณะ __construct (อาร์เรย์ $configuration, $plugin_id, $plugin_definition, AliasManagerInterface $alias_manager) {
พาเรนต์::__construct($configuration, $plugin_id, $plugin_definition);
$this->aliasManager = $alias_manager;
}
/**
* {@inheritdoc}
*/
การสร้างฟังก์ชันสแตติกสาธารณะ (ContainerInterface $container, อาร์เรย์ $configuration, $plugin_id, $plugin_definition) {
ส่งคืนค่าคงที่ใหม่ (
$configuration,
$plugin_id,
$plugin_definition,
$container->get('path_alias.manager'),
);
}
/**
* {@inheritdoc}
*/
ฟังก์ชันสาธารณะตรวจสอบอาร์กิวเมนต์ (อาร์กิวเมนต์ $) {
// นำหน้าเครื่องหมายทับ
$อาร์กิวเมนต์ = '/' ltrim($argument, '/');
$path = $this->aliasManager->getPathByAlias($อาร์กิวเมนต์);
ถ้า (preg_match('/node\/(\d+)/', $path, $match)) {
$this->argument->argument = $ตรงกัน[1];
กลับ TRUE;
}
กลับ FALSE;
}
}
ใน ตรวจสอบอาร์กิวเมนต์ ฟังก์ชันที่เรากำลังตรวจสอบว่าสามารถพบเส้นทางภายในสำหรับโหนดด้วยนามแฝงนั้นหรือไม่ และแปลงอาร์กิวเมนต์ที่กำหนดเป็น Node ID ที่สอดคล้องกัน
เพิ่มไฟล์นี้ชื่อ NodeAlias.php ให้กับคุณในโมดูลที่กำหนดเอง src/Plugin/views/argument_validator ไดเรกทอรีและล้างแคช
หลังจากนั้นคุณสามารถใช้ เนื้อหา : นิด ตัวกรองตามบริบทและเลือกในส่วน "เมื่อค่าตัวกรองอยู่ใน URL หรือมีการระบุค่าเริ่มต้น" ตัวตรวจสอบความถูกต้องใหม่ รหัสโหนดตามนามแฝง.