Saya memiliki kosakata yang besar, dan pandangan admin belum berfungsi untuk taksonomi. Manajer Taksonomi tidak melakukan ini juga. Apakah ada opsi untuk menghapus istilah massal?
Saya memiliki kosakata yang besar, dan pandangan admin belum berfungsi untuk taksonomi. Manajer Taksonomi tidak melakukan ini juga. Apakah ada opsi untuk menghapus istilah massal?
Jawaban:
Manajer taksonomi memang memiliki fungsionalitas penghapusan massal, cukup pilih semua istilah dalam kosakata Anda dan klik tombol 'Hapus':
Jika Anda ingin melakukannya menggunakan kode seperti berikut ini akan membantu:
$vocabulary = taxonomy_vocabulary_machine_name_load('my_custom_vocabulary');
foreach (taxonomy_get_tree($vocabulary->vid) as $term) {
taxonomy_term_delete($term->tid);
}
Metode favorit untuk menghapus konten secara massal berdasarkan jenis konten, kosakata taksonomi, dll. Menggunakan modul http://drupal.org/project/devel . Untuk menghapus semua istilah dalam kosakata:
Voila-- kosakata kosong, jika tidak tersentuh.
Anda dapat menggunakan perintah berikut:
drush -v eval 'foreach(taxonomy_get_tree(123) as $term) { taxonomy_term_delete($term->tid); }'
Jika tidak berhasil, pastikan Anda menghapus cache (mis. Memcached).
Atau cara yang lebih cepat dengan menggunakan kueri SQL kotor berikut:
drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = 123"
Di mana 123 adalah id kosakata Anda yang harus Anda ubah.
Anda bisa mendapatkan vid
nama kosakata Anda dengan perintah berikut:
drush sqlq "SELECT name, vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name'"
Lihat juga:
drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
Tampilan admin hanya menyediakan tampilan VBO yang telah dikonfigurasi sebelumnya. VBO sendiri berfungsi dengan baik dengan istilah (atau jenis entitas lainnya). Instal VBO sendiri dan buat tampilan yang Anda inginkan, lalu gunakan VBO untuk menghapus persyaratan.
Untuk menghapus secara massal semua istilah taksonomi dalam kosa kata di Drupal 7, gunakan taxonomy_term_delete
fungsi dengan mengulang semua istilah.
Perhatikan contoh berikut:
// 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);
}
}
Bahkan lebih mudah, jika Anda memiliki Drush dan devel modul diinstal, Anda dapat menggunakan perintah berikut untuk massal menghapus semua istilah dalam taksonomi * dari kenyamanan shell Anda:
$ drush menghasilkan-persyaratan TAXONOMY_MACHINE_NAME 0 --kill
* Ini mengasumsikan Anda mengaktifkan modul Devel Generate, yang dapat dilakukan jika perlu:
$ drush en -y devel && drush en -y devel_generate
Saya akan merekomendasikan menggunakan Tampilan Admin dengan VBO untuk mendapatkan tampilan untuk menggantikan tampilan standar dari istilah Taksonomi.
Yang harus Anda lakukan adalah sebagai berikut:
Saya baru saja menulis posting blog tentang cara menambahkan tombol untuk menghapus semua istilah taksonomi di sini .
Pada dasarnya:
Saya menggunakan plugin Dialog Konfirmasi Mudah jQuery untuk ini. Pertama-tama unduh perpustakaan dari sini dan letakkan ini di folder tema js Anda.
Kami kemudian dapat menambahkan tombol "Hapus Semua Ketentuan" dengan kode kecil di modul khusus:
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="https://drupal.stackexchange.com/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;
}
}
Sekarang kita perlu mendefinisikan path ke fungsi kita untuk menghapus istilah:
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;
}
Dan akhirnya menambahkan fungsi untuk benar-benar menghapus persyaratan:
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);
}
Hanya untuk melengkapi jawaban ada modul melakukan hal ini. Ini adalah modul taxonomy_delete_all_terms . Saya sudah menggunakannya dan berhasil.
Untuk situs dengan kosa kata Taksonomi yang sangat besar, menghapus kosa kata mungkin menjadi tidak mungkin karena istilah waktu penghapusan permintaan dihapus. Ketika itu terjadi sebelum transaksi penghapusan selesai, transaksi dibatalkan, sehingga tidak ada syarat sama sekali untuk dihapus.
Jawaban saya berhubungan dengan pertanyaan awal. Membangun jawaban kenorb , jika Anda ingin membersihkan SEMUA kosakata di situs Anda, Anda dapat menjalankan yang berikut:
drush -v eval '$vocabularies = taxonomy_get_vocabularies(); foreach($vocabularies as $vocabulary) { foreach(taxonomy_get_tree($vocabulary->vid) as $term) { taxonomy_term_delete($term->tid);}}'
Seperti yang dikatakan oleh @texas_bronius, jika Anda telah mengaktifkan devel generate, Anda dapat menggunakannya tetapi mengambilnya selangkah lebih maju, jika Anda juga telah menginstal drush, saya menggunakan perintah ini:
drush generate-terms [vocabulary_machine_name] 0 --kill
Dan ganti [vocabulary_machine_name] dengan nama mesin dari kosakata Anda. "0" adalah untuk berapa banyak istilah yang ditambahkan dan "--bunuh" adalah untuk menghapus yang saat ini ada di sana.