Bagaimana cara menghapus semua istilah dari kosakata (penghapusan massal)?


Jawaban:


15

Manajer taksonomi memang memiliki fungsionalitas penghapusan massal, cukup pilih semua istilah dalam kosakata Anda dan klik tombol 'Hapus':

masukkan deskripsi gambar di sini

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);
}

Ok terima kasih, meskipun Taxo Manager tidak memiliki opsi pilih massal, dan jika Anda memiliki ratusan istilah, Anda harus memeriksa masing-masing satu per satu.
giorgio79

Ya itu agak menjengkelkan sebenarnya, saya mungkin memasukkan permintaan fitur untuk itu
Clive

2
Terima kasih telah menambahkan metode UI dan kode! Selalu sangat berguna +1
Matt Fletcher

5
@ giorgio79 sebagian besar browser modern mendukung Shift + Klik pada kotak centang. Jika Anda mengklik kotak centang, lalu Shift + Klik pada kotak centang lain di grup yang sama, semua kotak centang antara 2 akan dipilih / tidak dipilih.
Елин Й.

26

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:

  1. Aktifkan modul Devel dan Devel Generate
  2. Pergi ke Pengembangan> Hasilkan Ketentuan
  3. Pilih Kosakata dari mana Anda ingin menghapus istilah
  4. Masukkan "0" untuk menghasilkan jumlah Ketentuan
  5. Periksa "Hapus persyaratan yang ada sebelum membuat yang baru"
  6. Klik Kirim

Voila-- kosakata kosong, jika tidak tersentuh.


Modul disebut:
Devel

6

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 vidnama kosakata Anda dengan perintah berikut:

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

Lihat juga:


1
itu bekerja dengan sangat sederhana :-)
Alejandro Moreno

1
Jawaban bagus! Anda layak mendapatkan lebih banyak suara!
Lautaro Rosales

1
Anda bahkan dapat menggabungkan keduanya, jika Anda merasa lincah: drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
Kirkland

2

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.


2

Untuk menghapus secara massal semua istilah taksonomi dalam kosa kata di Drupal 7, gunakan taxonomy_term_deletefungsi 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


terima kasih untuk drush generasenya karena meledak ketika digunakan dari UI
GiorgosK

1

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:

  1. Aktifkan modul-modul itu tentu saja
  2. Aktifkan tampilan yang disebut "Administrasi: istilah Taksonomi"
  3. Tambahkan kolom ke tampilan yang disebut "Operasi massal: istilah taksonomi"
  4. FLUSH CACHES - lalu buka Admin> Struktur> Taksonomi> Vocab Khusus

Tampilan Operasi Massal dan Tampilan Admin


1

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);
}

0

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.


0

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);}}'

0

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.