Điểm:0

Cách sử dụng hook_node_insert để tự động gắn cờ các nút của một loại nội dung cụ thể

lá cờ pe

Tất cả các nút của một loại nội dung trong dự án của tôi cần được tự động gắn cờ (bởi mô-đun Flags) khi được tạo. Tôi biết rằng có thể có một cách để thực hiện điều này bằng cách sử dụng mô-đun Quy tắc, nhưng tôi đang cố gắng xây dựng mô-đun tùy chỉnh đầu tiên của mình để thực hiện điều đó, bởi vì a) Tôi không nghĩ mình sẽ cần đến Quy tắc cho bất cứ điều gì khác trong dự án này và b) tôi muốn bắt tay vào tạo các mô-đun tùy chỉnh. (Tôi có một mô-đun 'xin chào thế giới' cơ bản đang hoạt động.)

Một yêu cầu hỗ trợ trong mô-đun Cờ dường như cung cấp một cách đơn giản để tự động gắn cờ các nút, nhưng đối với tôi, có vẻ như nó sẽ làm điều này với các nút của tất cả các loại nội dung. https://www.drupal.org/project/flag/issues/3030288

Để thuận tiện, đây là mã ở đó, cho một lá cờ có tên là dấu trang...

hàm your_module_node_insert(Drupal\Core\Entity\EntityInterface $entity){
 $flag = \Drupal::entityTypeManager()->getStorage('flag')->load('bookmark');
 \Drupal::service('flag')->flag($flag, $entity);
}

Trang api cho hook này dường như không cho tôi biết những gì tôi cần biết. (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21entity.api.php/function/hook_ENTITY_TYPE_insert/9.0.x)

Câu hỏi: Đây có phải là móc phù hợp cho nhu cầu này không? Nếu vậy, làm cách nào tôi có thể giới hạn nó ở một loại nội dung cụ thể?

sonfd avatar
lá cờ in
Xem [các tài liệu về Node](https://api.drupal.org/api/drupal/core%21modules%21node%21src%21Entity%21Node.php/class/Node/9.2.x). Bạn có thể lấy loại nội dung (còn gọi là gói) của nút với `$entity->bundle()` là loại chung và sẽ hoạt động cho tất cả các thực thể nội dung.
sea26.2 avatar
lá cờ om
Liên kết này sẽ giúp ích? https://drupal.stackexchange.com/questions/185442/how-can-i-programmatically-create-a-node
lá cờ pe
Cả hai đều hữu ích để lấp đầy khoảng trống. Với nền tảng gần như bằng không của tôi về làm việc với các đối tượng, lớp, phương thức, v.v., tôi chủ yếu cần hiểu cú pháp. Cách đúng đắn để làm điều đó là học qua một khóa học từ các khái niệm cơ bản trở lên, nhưng vâng, tìm kiếm các lối tắt. Bất kỳ ví dụ mã bổ sung sẽ là tuyệt vời. Một số sẽ gần hơn với những gì tôi đang cố gắng làm. Tôi có thể tìm kiếm các mẫu sau đó thử và sai trong suốt quãng đường còn lại. Có thể.
lá cờ pe
Tôi đã cập nhật câu hỏi dựa trên các bài kiểm tra mới nhất của mình.
Jaypan avatar
lá cờ de
Bạn đã định cấu hình thực thể chưa? https://git.drupalcode.org/project/flag/-/tree/8.x-4.x#configuration. Nếu không, thì có thể bạn đang chẩn đoán sai sự cố, hãy thử chạy update.php.
lá cờ pe
Cảm ơn. Sau khi tìm hiểu kỹ hơn, tôi xác định rằng mã của mình hoạt động, vì vậy tôi sẽ chuyển mã đó sang Câu trả lời. Lý do tôi nghĩ nó không thành công là cờ liên quan có trường tham chiếu thực thể và tất nhiên mã này không đặt trường đó. Nó không đặt cờ mặc dù.
Điểm:0
lá cờ pe

Điều này đang làm việc cho tôi ...

'rf_tweaks' là tên máy mô-đun, 'research_note' là loại nội dung nút và 'research_item' là tên của cờ.

sử dụng Drupal\node\Entity\Node;

chức năng rf_tweaks_node_insert(Node $node) {
  if ($node->bundle() == 'research_note'){
 $flag = \Drupal::entityTypeManager()->getStorage('flag')->load('research_item');
 \Drupal::service('flag')->flag($flag, $node);
}
}

Vì lợi ích của những người xây dựng mô-đun lần đầu tiên khác, đây là tệp rf_tweaks.module và tệp bắt đầu bằng <?php cần thiết trong những.

lá cờ pe
Chà, nó đã hoạt động nhưng bây giờ thì không. Lỗi... "Cờ không áp dụng cho gói của thực thể. trong Drupal\flag\FlagService->flag() (dòng 294 của ...modules/contrib/flag/src/FlagService.php)", theo sau là "Drupal\Core\Entity\EntityStorageException: Cờ không áp dụng cho gói của thực thể. trong Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (dòng 810 của ...core/lib/Drupal/Core /Entity/Sql/SqlContentEntityStorage.php)."
lá cờ pe
Trên thực tế vẫn hoạt động nhưng phải đảm bảo loại nội dung vẫn được bật trong cấu hình cho cờ đó. Điều này là do mô-đun gọi cờ api. (Hoặc vì vậy tôi được dẫn dắt để hiểu.)

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