Tôi lập trình tạo một loại nội dung trong khi cài đặt mô-đun (sử dụng cấu hình lưu trữ trường).
Tôi muốn xóa loại nội dung đó trong khi gỡ cài đặt mô-đun.
Có cách nào để làm điều này với Drupal 8 không?
Tôi lập trình tạo một loại nội dung trong khi cài đặt mô-đun (sử dụng cấu hình lưu trữ trường).
Tôi muốn xóa loại nội dung đó trong khi gỡ cài đặt mô-đun.
Có cách nào để làm điều này với Drupal 8 không?
Câu trả lời:
Chỉ cần đảm bảo rằng loại nút phụ thuộc vào mô-đun của bạn, sau đó Drupal sẽ tự động xóa nó cho bạn.
Xem node.type.book.yml trong mô-đun sách để biết ví dụ, đây là phần có liên quan:
dependencies:
enforced:
module:
- book
Lưu ý rằng người dùng sẽ phải xóa tất cả nội dung của loại đó trước khi họ có thể gỡ cài đặt mô-đun.
Không có đủ tín dụng để bình luận, tôi sẽ đặt nó ở đây:
@Berdir, đối với tôi, việc thực thi mô-đun trong tệp node.type.custom.yml là không đủ để thực thi việc xóa các nút khi gỡ cài đặt
Lưu ý rằng người dùng sẽ phải xóa tất cả nội dung của loại đó trước khi họ có thể gỡ cài đặt mô-đun sau đó
Trong trường hợp của tôi, loại nội dung bị xóa khi gỡ cài đặt mô-đun. Nhưng việc xóa nội dung tùy chỉnh (các nút) không được thực thi. Để đạt được điều này, mô-đun tùy chỉnh nên thực hiện ModuleUninstallValidatorInterface
.
Khi thực hiện mô-đun tùy chỉnh không thể được gỡ cài đặt trước khi các nút tùy chỉnh bị xóa. Hộp chọn sẽ được hủy kích hoạt.
Thay vì thực hiện Giao diện tôi đang làm bẩn nó bằng cách xóa các nút trong hook_uninstall()
:
function MYMODULE_uninstall() {
// Delete custom_type nodes when uninstalling.
$query = \Drupal::entityQuery('node')
->condition('type', 'custom_type');
$nids = $query->execute();
// debug($nids);
foreach ($nids as $nid) {
\Drupal\node\Entity\Node::load($nid)->delete();
}
}
Để kích hoạt một số hành động khi gỡ cài đặt mô-đun, bạn phải thực hiện hook_uninstall
trong *.install
tệp của mô-đun . Trước khi xóa loại nội dung, bạn có thể muốn đảm bảo tất cả các nút của loại nội dung đó cũng bị xóa. Cuối cùng, sau khi gỡ cài đặt mô-đun và xóa loại nội dung, đừng quên xuất cấu hình đã cập nhật.
/**
* Place a short description here.
*/
function MYMODULE_uninstall() {
// Delete all nodes of given content type.
$storage_handler = \Drupal::entityTypeManager()
->getStorage('node');
$nodes = $storage_handler->loadByProperties(['type' => 'MACHINE_NAME_OF_TYPE']);
$storage_handler->delete($nodes);
// Delete content type.
$content_type = \Drupal::entityTypeManager()
->getStorage('node_type')
->load('MACHINE_NAME_OF_TYPE');
$content_type->delete();
}
bundle
của MACHINE_NAME_OF_TYPE
, giống như truy vấn node-id câu trả lời dựa trên không, hay không? Ý tôi là, điều đó có vẻ hơi tốn kém (nếu có nhiều NID) và tôi muốn sử dụng giải pháp này khi có thể.
drupal snippet --code='$content_type = \Drupal::entityManager()->getStorage("node_type")->load("MACHINE_NAME_OF_TYPE"); $content_type->delete();'