Không thể xóa loại nội dung tính năng sau khi gỡ cài đặt tính năng


Câu trả lời:


15

Dung dịch

Sử dụng hook_uninstall()tệp trong FEATURE_NAME.install và thay đổi trạng thái của loại nội dung, do đó hệ thống cho rằng đây là loại nội dung tùy chỉnh được mở khóa.

Tôi cũng đăng bài này trên d.org .

<?php
/**
 * Implements hook_uninstall().
 */
function FEATURE_NAME_uninstall() {

  // List custom content types added by this feature
  $custom_ctypes = array(
    'blog',
  );

  // Go through each and unlock the content type
  foreach ($custom_ctypes as $ctype) {
    db_query("UPDATE {node_type} SET `custom` = 1, locked = 0 WHERE type = :ctype", array(':ctype' => $ctype));
  }

  // Clean Drupal cache; this is necessary for the "Delete" link to appear
  // next to the content type created by the feature.
  drupal_flush_all_caches();

}

Điều này sẽ làm cho nút "Xóa" xuất hiện cho loại nội dung đó, vì vậy bạn có thể xóa nó khỏi quản trị viên.

Hy vọng điều này sẽ giúp được ai đó!


1
Để làm rõ, điều này không xóa các loại nội dung; nó làm cho liên kết 'xóa' có sẵn trong trang danh sách loại nội dung. Cảm ơn @ Ivanhoe123!
ngờ1ejack

1
Ngoài ra, tôi không thể làm điều này trong khi mô-đun tính năng của tôi được bật, nhưng sau khi tắt và gỡ cài đặt (tôi đã sử dụng drush), nó hoạt động rất tốt. Phím tắt: sử dụng mô-đun phát bằng cách thả nội dung của hàm này vào / devel / php. Để lập trình xóa nội dung, hãy thêm node_type_delete($ctype); sau khi truy vấn trong vòng lặp for.
ngờ1ejack

Cảm ơn mã đó. Sau khi thấy mã này, tôi đã chỉnh sửa cơ sở dữ liệu của mình bằng phpMyAdmin và chỉnh sửa bảng "node_type". Sau đó, tôi tìm thấy loại bối cảnh tôi muốn xóa và đặt giá trị "Tùy chỉnh" thành "1". Và Finnaly tôi đã xóa nó khỏi Cục quản lý Drupal.
ANDiTKO

2
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Marco Lazzeri

Giải pháp @ MarcoLazzeri hoạt động hoàn hảo với tôi và tốt hơn nhiều so với việc phải cập nhật mô-đun tính năng của tôi chỉ để gỡ cài đặt nó.
bánh rán

11

Đối với tôi, giải pháp là tải trang xóa thủ công vì không có liên kết "xóa" trên trang loại nội dung. Để làm điều này, bạn chỉ cần tự xây dựng URL bằng cách làm theo cấu trúc URL giống như trang xóa cho các loại nội dung khác:

quản trị viên / cấu trúc / loại / quản lý / YOU_CONTENT_TYPE_MACHINE_NAME / xóa

Điều này đưa lên trang xác nhận xóa loại nội dung, sau đó cho phép tôi xóa loại nội dung.

Để tham khảo, xem chủ đề này trên Drupal.org:

https://drupal.org/node/1055460#comment-7297680

Trân trọng,

@cmsdave


Tôi chỉ thay đổi liên kết loại nội dung hiển thị ở cuối để xóa và có thể xóa loại nội dung mà không có vấn đề. Giải pháp này hoạt động!
cateye

Lưu ý : Trước khi nó hoạt động, tôi phải chỉnh sửa .infotệp của tính năng và xóa loại nội dung, sau đó nó sẽ thực sự xóa.
Duncanmoo

3

Phương pháp trên không xóa các nguyên tắc phân loại, nhưng điều này có thể đạt được bằng cách nối thêm các mục sau sau khi vô hiệu hóa và gỡ cài đặt mô-đun:

// Delete taxonomies.
$machine_names = array('taxonomy_a', 'taxonomy_b');
foreach ($machine_names as $machine_name) {
  $taxonomy = taxonomy_vocabulary_machine_name_load($machine_name);
  taxonomy_vocabulary_delete($taxonomy->vid);
}

1

Một giải pháp khác làm việc cho tôi trực tiếp đến cơ sở dữ liệu trong trang web phát triển của tôi. Hãy nhớ luôn luôn sao lưu cơ sở dữ liệu của bạn.

Để xóa thủ công một loại nội dung được tạo bởi tính năng # 16, điều mà Nedjo gợi ý là như sau:

  • Vô hiệu hóa tính năng. Đôi khi tôi gặp vấn đề với điều này - một tính năng sẽ không vô hiệu hóa. Trong trường hợp này, loại bỏ mã mô-đun tính năng.
  • Xác định tên máy của loại nội dung sẽ bị xóa, ví dụ: 'mytype'.
  • Trong cơ sở dữ liệu, hoàn nguyên các giá trị bảng node_type về mặc định như thể kiểu nội dung được tạo thủ công thông qua UI:

mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';

  • Xóa bộ nhớ cache để đảm bảo thay đổi loại nội dung có sẵn.
  • Thông qua UI tại admin / cấu trúc / loại, xóa loại nội dung.

0

Nếu bạn sử dụng mô-đun admin_menu , bạn vẫn sẽ thấy các liên kết xóa trong menu kéo xuống Cấu trúc / Loại nội dung / [tên loại nội dung] / Xóa, ngay cả khi chúng không được hiển thị trên trang loại nội dung.

Tôi sẽ nói rằng nó khá an toàn để sử dụng liên kết xóa này nếu bạn đảm bảo không có tài liệu tham khảo nào khác cho loại nội dung này nữa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.