Come eliminare tutti i termini da un vocabolario (eliminazione in blocco)?


Risposte:


15

Il Taxonomy Manager ha una funzionalità di eliminazione in blocco, basta selezionare tutti i termini nel tuo vocabolario e fare clic sul pulsante "Elimina":

inserisci qui la descrizione dell'immagine

Se vuoi farlo usando il codice, qualcosa di simile al seguente dovrebbe aiutare:

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

Ok grazie, anche se Taxo Manager non ha un'opzione di selezione in blocco, e se hai centinaia di termini dovresti controllare ognuno per uno.
giorgio79,

Sì, in realtà è un po 'fastidioso, potrei inserire una richiesta di funzionalità per questo
Clive

2
Grazie per aver aggiunto sia l'interfaccia utente che i metodi del codice! Sempre molto utile +1
Matt Fletcher,

5
@ giorgio79 i browser più moderni supportano Maiusc + Fare clic sulle caselle di controllo. Se fai clic su una casella di controllo, quindi Maiusc + clic su un'altra casella di controllo nello stesso gruppo, tutte le caselle di controllo tra quelle 2 verranno selezionate / deselezionate.
Елин Й.

26

Un metodo preferito di eliminazione collettiva di contenuti per tipo di contenuto, vocabolario tassonomico, ecc. Utilizza il modulo http://drupal.org/project/devel . Per eliminare tutti i termini in un vocabolario:

  1. Abilitare i moduli Devel e Devel Generate
  2. Vai a Sviluppo> Genera termini
  3. Seleziona il vocabolario da cui desideri eliminare i termini
  4. Immettere "0" per il numero di Termini da generare
  5. Seleziona "Elimina i termini esistenti prima di generarne di nuovi"
  6. Fai clic su Invia

Voilà: vocabolario vuoto, altrimenti intatto.


Il modulo si chiama: Devel Generate
kenorb,

6

Puoi usare il seguente comando:

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

Se non funziona, assicurati di svuotare la cache (ad esempio memcached).

O un modo più veloce utilizzando la seguente query SQL sporca:

drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = 123"

Dove 123 è il tuo ID di vocabolario che dovresti cambiare.

Puoi ottenere vidil nome del tuo vocabolario con il seguente comando:

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

Guarda anche:


1
che funziona magnificamente semplicemente :-)
Alejandro Moreno

1
Bella risposta! Ti meriti più voti!
Lautaro Rosales,

1
Potresti anche combinare i due, se ti senti vivace: drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
Kirkland,

2

Le viste amministratore forniscono solo viste VBO preconfigurate. VBO stesso funziona bene con i termini (o qualsiasi altro tipo di entità) Installa VBO tu stesso e crea la vista che desideri, quindi usa VBO per eliminare i termini.


2

Per eliminare in blocco tutti i termini della tassonomia all'interno di un vocabolario in Drupal 7, usa la taxonomy_term_deletefunzione eseguendo il ciclo attraverso tutti i termini.

Considera il seguente esempio:

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

Ancora più semplice, se hai installato Drush e il modulo Devel , puoi usare il seguente comando per cancellare tutti i termini in una tassonomia * comodamente dalla tua shell:

$ drush genera termini TAXONOMY_MACHINE_NAME 0 --kill

* Ciò presuppone che tu abbia abilitato il modulo Devel Generate, che può essere fatto se necessario:

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


grazie per i termini generici di droga perché era
esplosa

1

Consiglierei di utilizzare Admin Views con VBO per ottenere una vista in sostituzione della visualizzazione predefinita dei termini di tassonomia.

Quello che devi fare è il seguente:

  1. Abilita ovviamente quei moduli
  2. Abilita la vista chiamata "Amministrazione: termini di tassonomia"
  3. Aggiungi una colonna nella vista denominata "Operazioni in blocco: termine tassonomia"
  4. FLUSH CACHES - quindi vai su Ammin.> Struttura> Tassonomia> Vocab specifico

Visualizzazioni Operazioni collettive e Visualizzazioni amministratore


1

Ho appena scritto un post sul blog su come aggiungere un pulsante per eliminare tutti i termini di tassonomia qui .

Essenzialmente:

Per questo sto usando il plugin jQuery Easy Confirm Dialog . Prima scarica la libreria da qui e inseriscila nella cartella js dei temi.

Possiamo quindi aggiungere un pulsante "Elimina tutti i termini" con un piccolo codice in un modulo personalizzato:

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

Ora dobbiamo definire il percorso della nostra funzione per eliminare i termini:

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

E infine aggiungi la funzionalità per eliminare effettivamente i termini:

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

Solo per completare le risposte c'è un modulo che fa esattamente questo. È il modulo taxonomy_delete_all_terms . L'ho usato e funziona.

Per i siti con vocabolari di tassonomia molto grandi, l'eliminazione dei vocabolari potrebbe diventare impossibile a causa del termine del termine di richiesta di eliminazione. Quando ciò accade prima del completamento della transazione di eliminazione, la transazione viene ripristinata, senza che i termini vengano eliminati.


0

La mia risposta è tangenzialmente legata alla domanda originale. Sulla base di kenorb risposta, se si desidera pulire TUTTI vocabolari al vostro sito, è possibile eseguire il seguente:

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

Come è stato detto da @texas_bronius, se hai sviluppato generate abilitato, puoi usarlo ma facendo un ulteriore passo avanti, se hai anche drush installato, io uso questo comando:

drush generate-terms [vocabulary_machine_name] 0 --kill

E basta sostituire [vocabulary_machine_name] con il nome della macchina del tuo vocabolario. Lo "0" indica quanti termini aggiungere e "--kill" rimuove quelli attualmente presenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.