Tôi có vốn từ vựng lớn và lượt xem của quản trị viên chưa hoạt động cho phân loại. Quản lý phân loại không làm điều này là tốt. Có bất kỳ tùy chọn để xóa hạn hàng loạt?
Tôi có vốn từ vựng lớn và lượt xem của quản trị viên chưa hoạt động cho phân loại. Quản lý phân loại không làm điều này là tốt. Có bất kỳ tùy chọn để xóa hạn hàng loạt?
Câu trả lời:
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':
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);
}
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:
Voila-- từ vựng trống rỗng, nếu không bị ảnh hưởng.
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 vid
tê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:
drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
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.
Để 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_delete
chứ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ó Drush và Devel 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
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:
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);
}
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.
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);}}'
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 đó.