Score:1

Use path alias as contextual filter

ธง cn

I have nodes in Drupal for News Articles that generates this automatic URL alias.

screenshot

I also have a view for News nodes.

screenshot

This is the data.

screenshot

The problem is that I can't use Content: Path (url) or Content: Path (Path) as contextual filter.

sync/newslist/1234, where 1234 is node ID, works. I would like to pass the path or the URL to the contextual filter, so that sync/newslist/world-first-chart-alerts-non-artists will return that node.

4uk4 avatar
cn flag
นี่ไม่ใช่ปัญหาตัวกรองตามบริบท ปัญหาคือคุณไม่เคยเข้าถึง View ผ่านนามแฝงพาธเพราะมันไม่ตรงกัน คุณสามารถเขียนตัวประมวลผลเส้นทางของคุณเองสำหรับการจับคู่บางส่วนหรือลองใช้โมดูลสนับสนุน เช่น https://www.drupal.org/project/subpathauto
Score:2
ธง gb

ตัวอย่างเช่น คุณสามารถสร้าง 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 หรือมีการระบุค่าเริ่มต้น" ตัวตรวจสอบความถูกต้องใหม่ รหัสโหนดตามนามแฝง.

ป้อนคำอธิบายรูปภาพที่นี่

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา