Làm thế nào để xóa tất cả các thuật ngữ từ một từ vựng (xóa hàng loạt)?


Câu trả lời:


15

Trình quản lý phân loại có chức năng xóa hàng loạt, chỉ cần chọn tất cả các thuật ngữ trong từ vựng của bạn và nhấp vào nút 'Xóa':

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

Nếu bạn muốn làm điều đó bằng cách sử dụng mã như sau đây sẽ giúp:

$vocabulary = taxonomy_vocabulary_machine_name_load('my_custom_vocabulary');
foreach (taxonomy_get_tree($vocabulary->vid) as $term) {
  taxonomy_term_delete($term->tid);
}

Ok cảm ơn, mặc dù Taxo Manager không có tùy chọn chọn hàng loạt và nếu bạn có hàng trăm điều khoản, bạn sẽ phải kiểm tra từng điều khoản một.
giorgio79

Vâng, điều đó thực sự gây phiền nhiễu, tôi có thể đưa ra một yêu cầu tính năng cho điều đó
Clive

2
Cảm ơn bạn đã thêm cả phương thức UI và mã! Luôn rất hữu ích +1
Matt Fletcher

5
@ giorgio79 hầu hết các trình duyệt hiện đại đều hỗ trợ Shift + Nhấp vào hộp kiểm. Nếu bạn nhấp vào hộp kiểm, sau đó Shift + Nhấp vào hộp kiểm khác trong cùng một nhóm, tất cả các hộp kiểm giữa 2 người đó sẽ được chọn / không được chọn.
ЕЕннн

26

Một phương pháp ưa thích của việc xóa nội dung hàng loạt theo loại nội dung, từ vựng phân loại, v.v ... sử dụng mô-đun http://drupal.org/project/devel . Để xóa tất cả các thuật ngữ trong một từ vựng:

  1. Kích hoạt các mô-đun Tạo Devel và Devel
  2. Chuyển đến Phát triển> Tạo Điều khoản
  3. Chọn Từ vựng mà bạn muốn xóa các từ
  4. Nhập "0" cho số lượng Điều khoản để tạo
  5. Kiểm tra "Xóa các thuật ngữ hiện có trước khi tạo các thuật ngữ mới"
  6. Nhấp vào Gửi

Voila-- từ vựng trống rỗng, nếu không bị ảnh hưởng.


Mô-đun được gọi là: Devel Generate
kenorb

6

Bạn có thể sử dụng lệnh sau:

drush -v eval 'foreach(taxonomy_get_tree(123) as $term) { taxonomy_term_delete($term->tid); }'

Nếu nó không hoạt động, hãy đảm bảo rằng bạn xóa bộ nhớ cache của mình (ví dụ: memcached).

Hoặc cách nhanh hơn bằng cách sử dụng truy vấn SQL bẩn sau đây:

drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = 123"

Trong đó 123 là id từ vựng của bạn mà bạn nên thay đổi.

Bạn có thể lấy vidtên từ vựng của mình bằng lệnh sau:

drush sqlq "SELECT name, vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name'"

Xem thêm:


1
hoạt động rất đơn giản :-)
Alejandro Moreno

1
Câu trả lời chính xác! Bạn xứng đáng được nâng cấp hơn!
Lautaro Rosales

1
Bạn thậm chí có thể kết hợp cả hai, nếu bạn cảm thấy khó chịu: drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
Kirkland

2

Lượt xem của quản trị viên chỉ cung cấp lượt xem VBO được cấu hình sẵn. Bản thân VBO hoạt động tốt với các điều khoản (hoặc bất kỳ loại thực thể nào khác) Tự cài đặt VBO và tạo chế độ xem mà bạn muốn, sau đó sử dụng VBO để xóa các điều khoản.


2

Để xóa hàng loạt tất cả các thuật ngữ phân loại trong một từ vựng trong Drupal 7, hãy sử dụng taxonomy_term_deletechức năng bằng cách lặp qua tất cả các thuật ngữ.

Hãy xem xét ví dụ sau:

// Get metadata about the vocabulary from its machine name
$vocab = taxonomy_vocabulary_machine_name_load('TAXONOMY_MACHINE_NAME');

// Get a hierarchical representation of all terms
$terms = taxonomy_get_tree($vocab->vid);

// Loop thru all terms in the taxonomy, deleting each one
if (!empty($terms)) {
  foreach ($terms as $term) {
    taxonomy_term_delete($term->tid);
  }
}

Thậm chí dễ dàng hơn, nếu bạn có DrushDevel mô-đun cài đặt, bạn có thể sử dụng lệnh sau để rời xóa tất cả các điều khoản trong một phân loại * sự thoải mái của shell của bạn từ:

$ drush thuật ngữ tạo TAXONOMY_MACHINE_NAME 0 - giết

* Điều này giả định rằng bạn đã bật mô-đun Devel Generate, có thể được thực hiện nếu cần:

$ drush en -y devel && drush en -y devel_generate


cảm ơn về các thuật ngữ tạo drush vì nó đã nổ tung khi được sử dụng từ UI
GiorgosK

1

Tôi sẽ khuyên bạn nên sử dụng Chế độ xem của Quản trị viên với VBO để có chế độ xem thay thế hiển thị mặc định các thuật ngữ Phân loại.

Những gì bạn phải làm là như sau:

  1. Cho phép các mô-đun tất nhiên
  2. Cho phép chế độ xem được gọi là "Quản trị: Điều khoản phân loại"
  3. Thêm một cột vào chế độ xem được gọi là "Hoạt động hàng loạt: Thuật ngữ phân loại"
  4. FLACH CACHES - sau đó đi tới Quản trị viên> Cấu trúc> Phân loại> Từ vựng cụ thể

Lượt xem Hoạt động hàng loạt và Lượt xem của quản trị viên


1

Tôi vừa mới viết một bài đăng trên blog về cách thêm một nút để xóa tất cả các điều khoản phân loại ở đây .

Bản chất:

Tôi đang sử dụng plugin Dialog Easy Confirm Dialog cho việc này. Đầu tiên tải thư viện từ đây và đặt nó vào thư mục js chủ đề của bạn.

Sau đó, chúng tôi có thể thêm nút Xóa Xóa tất cả các điều khoản bằng một ít mã trong mô-đun tùy chỉnh:

function hook_form_alter(&$form, &$form_state, $form_id) {
    switch($form_id) {
        case 'taxonomy_overview_terms':

            if($form['#total_entries']) {
                drupal_add_library('system', 'ui.dialog');
                drupal_add_js(drupal_get_path('theme', 'YOUR_THEME_NAME').'/js/jquery.easy-confirm-dialog.js');         
                $js = 'jQuery(document).ready(function($){$(".confirm").easyconfirm({locale: { title: \'Delete all '.$form['#vocabulary']->name.' terms\', button: [\'No\',\'Yes\']}});});';
                drupal_add_js($js, array('type'=>'inline'));
                $form['actions']['delete_all'] = array(
                    '#markup' => '<a href="/drupal//admin/structure/taxonomy/'.$form['#vocabulary']->vid.'/delete-all" class="button confirm" title="Are you sure you want to delete all terms from the '.$form['#vocabulary']->name.' vocabulary?">Delete All Terms</a>',
                    '#weight' => 10,
                    '#attributes' => array('class' => array('button'))
                );
            }

            break;
    }
}

Bây giờ chúng ta cần xác định đường dẫn đến chức năng của mình để xóa các điều khoản:

function hook_menu() {
    $items = array();
    $items['admin/structure/taxonomy/%/delete-all'] = array(
        'title' => 'Delete all taxonomy terms',
        'type' => MENU_CALLBACK,
        'page callback' => 'delete_all_taxonomy_terms',
        'page arguments'    =>  array(3),
        'access arguments'  =>  array('administer taxonomy'),
    );
    return $items;
}

Và cuối cùng thêm chức năng để thực sự xóa các điều khoản:

function delete_all_taxonomy_terms($vid) {
    $vocabulary = taxonomy_vocabulary_load($vid);
    $query = new EntityFieldQuery();
    $result = $query
        ->entityCondition('entity_type', 'taxonomy_term')
        ->propertyCondition('vid', $vid)
        ->execute();
    foreach($result['taxonomy_term'] as $term) {
        taxonomy_term_delete($term->tid);
    }
    drupal_set_message('All terms have been deleted from the '.$vocabulary->name.' vocabulary');
    drupal_goto('admin/structure/taxonomy/'.$vocabulary->machine_name);
}

0

Chỉ cần hoàn thành các câu trả lời là có một mô-đun làm chính xác điều này. Đây là mô-đun taxonomy_delete_all_terms . Tôi đã sử dụng nó và nó hoạt động.

Đối với các trang web có từ vựng Phân loại rất lớn, việc xóa các từ vựng có thể trở nên không thể do hết thời hạn yêu cầu xóa. Khi điều đó xảy ra trước khi giao dịch xóa hoàn tất, giao dịch được khôi phục, khiến cho không có điều khoản nào bị xóa.


0

Câu trả lời của tôi liên quan đến câu hỏi ban đầu. Dựa trên câu trả lời của kenorb , nếu bạn muốn dọn sạch TẤT CẢ các từ vựng tại trang web của mình, bạn có thể chạy như sau:

drush -v eval '$vocabularies = taxonomy_get_vocabularies(); foreach($vocabularies as $vocabulary) { foreach(taxonomy_get_tree($vocabulary->vid) as $term) { taxonomy_term_delete($term->tid);}}'

0

Như đã nói bởi @texas_bronius, nếu bạn đã kích hoạt tính năng tạo phát, bạn có thể sử dụng nó nhưng tiến thêm một bước nữa, nếu bạn cũng đã cài đặt drush, tôi sử dụng lệnh này:

thuật ngữ tạo drush [dictionary_machine_name] 0 --kill

Và chỉ cần thay thế [dictionary_machine_name] bằng tên máy của từ vựng của bạn. "0" là có bao nhiêu thuật ngữ để thêm và "--kill" là để loại bỏ các thuật ngữ hiện có trong đó.

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.