Điểm:-1

Làm cách nào tôi có thể ghi đè nút được hiển thị bằng nội dung được mô-đun tùy chỉnh hiển thị?

lá cờ de

Tôi có một đường dẫn/ứng dụng, được hiển thị bởi một mô-đun tùy chỉnh (thông qua sự kết hợp của móc chủ đề/bộ điều khiển/định tuyến/nhánh). Về cơ bản nó là một ứng dụng nhỏ.

Tôi cũng có nút/dữ liệu Drupal, là nút Drupal có nội dung được tải bởi Drupal.

Tuy nhiên, tôi cần tải nội dung của/ứng dụng tại/data. Tôi đã thử đặt định tuyến của mô-đun tùy chỉnh của mình để sử dụng/dữ liệu thay vì/ứng dụng, nhưng Drupal vẫn tải nội dung nút Drupal tại/dữ liệu thay vì nội dung mô-đun tùy chỉnh. Vấn đề là, ứng dụng cụ thể này sử dụng các trường từ nút đó, vì vậy tôi không muốn xóa nút đó.Tôi chỉ muốn thay đổi những gì được hiển thị khi bạn xem nút, nhưng để nút đó hoạt động và có thể chỉnh sửa.

Cách tốt nhất để thực hiện điều này là gì?

Hodba Khalaf avatar
lá cờ eg
Để tải các biến trước khi nút được hiển thị, bạn cần sử dụng HOOK_pre process_node, bạn đã thử chưa?
lá cờ cn
Thay đổi đường dẫn của nút thành thứ gì đó không phải là /data. Vấn đề được giải quyết.
Anton avatar
lá cờ de
@Clive Lý tưởng nhất là tôi không thay đổi đường dẫn nút vì tôi muốn giữ lại vị trí nút được sử dụng trong menu. Có cách nào để ghi đè chế độ xem của nút bằng mô-đun tùy chỉnh không?
Anton avatar
lá cờ de
@HodbaKhalaf Tôi đã thử nhưng không thể thấy cách tải mọi thứ từ mô-đun tùy chỉnh vào trình xem nút. Bất cứ ý tưởng làm thế nào điều này có thể được thực hiện?
apaderno avatar
lá cờ us
Trước tiên, Drupal sử dụng các bí danh đường dẫn, sau đó là các tuyến đường được xác định từ các mô-đun. Nếu bạn đã thêm một nút có /admin/config/people/accounts làm bí danh đường dẫn, thì bạn sẽ không thấy trang cài đặt cho tài khoản nữa.
Hodba Khalaf avatar
lá cờ eg
@Anton trong bộ tiền xử lý, bạn có thể bỏ đặt nội dung và đặt các giá trị được tạo trong mô-đun tùy chỉnh, ví dụ: $variables['VARIABLE_NAME'] thì bạn có thể tạo chủ đề cho nó bằng tệp twig.nếu bạn có thể chia sẻ một số mã, có lẽ tôi có thể cung cấp cho bạn phản hồi tốt hơn.
Điểm:1
lá cờ us

Vì /data là bí danh đường dẫn cho một nút nên Drupal hiển thị nút đó thay vì hiển thị kết quả mà bộ điều khiển liên kết với đường dẫn đó trả về. Nếu bạn đặt bí danh đường dẫn nút thành /admin/config/people/accounts, Drupal sẽ hiển thị nút đó thay vì trang cài đặt tài khoản.

Nếu bạn muốn thay đổi mảng kết xuất được sử dụng cho một nút, bạn cần triển khai hook_ENTITY_TYPE_view(). bạn có thể so sánh $entity->id() với ID nút mà bạn muốn thêm dữ liệu vào mảng kết xuất của nó.

sử dụng \Drupal\Core\Entity\EntityInterface;
sử dụng \Drupal\Core\Entity\Display\EntityViewDisplayInterface;

/**
 * Triển khai hook_ENTITY_TYPE_view().
 */
function mymodule_node_view(mảng &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
  if ($entity->id() == 3) {
    // Thay đổi $build.
  }
}

Bạn cũng có thể tìm ID nút với bí danh đường dẫn của nó, chẳng hạn với mã tương tự như mã sau.

sử dụng \Drupal\Core\Entity\EntityInterface;
sử dụng \Drupal\Core\Entity\Display\EntityViewDisplayInterface;

/**
 * Triển khai hook_ENTITY_TYPE_view().
 */
function mymodule_node_view(mảng &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
  $path = \Drupal::service('path_alias.manager')->getPathByAlias('/data');

  if (preg_match('/node\/(\d+)/', $path, $matches)) {
    if ($entity->id() == $matches[1]) {
      // Thay đổi $build.
    }
  }
}

Nhìn thấy Làm cách nào tôi có thể lấy ID nút từ bí danh đường dẫn? điều này cũng giải thích khi nào nên sử dụng path_alias.manager hoặc là đường dẫn.alias_manager dịch vụ.

Anton avatar
lá cờ de
Ý tưởng tuyệt vời! Thay vào đó, tôi có thể tải nội dung mô-đun tùy chỉnh của mình tại đây bằng cách thêm vào $build. Tôi có một câu hỏi cho vấn đề này là: bên trong hook_ENTITY_TYPE_view(), thay vì sử dụng $entity->id(), có cách nào tinh tế để sử dụng định tuyến.yml của mô-đun tùy chỉnh để nhận và gọi phương thức bộ điều khiển thích hợp một cách linh hoạt không? Mặt khác, tôi mã hóa id giống như chỉ tạo một loại ghi đè 'nút--3.html.twig' và cũng mã hóa cứng bộ điều khiển và phương thức để tải nội dung từ đó.
apaderno avatar
lá cờ us
Bạn có thể lấy ID nút được cung cấp bí danh đường dẫn, như tôi trình bày trong câu trả lời được cập nhật. Mã này vẫn đang mã hóa cứng một giá trị (bí danh đường dẫn), nhưng việc đặt cùng một bí danh đường dẫn trên các trang web khác nhau sẽ dễ dàng hơn so với việc lấy cùng một ID nút cho các nút trên các trang web khác nhau.

Đă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.