Điểm:1

Use path alias as contextual filter

lá cờ 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
lá cờ cn
Đây không phải là vấn đề về bộ lọc theo ngữ cảnh. Vấn đề là bạn không bao giờ đến được Chế độ xem qua bí danh đường dẫn vì nó không khớp. Bạn có thể viết bộ xử lý đường dẫn của riêng mình để khớp một phần hoặc thử mô-đun đóng góp như https://www.drupal.org/project/subpathauto
Điểm:2
lá cờ gb

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.

nhập mô tả hình ảnh ở đây

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.