Wie lösche ich alle Begriffe aus einem Wortschatz (Massenlöschung)?

Antworten:

15

Der Taxonomie-Manager verfügt über eine Massenlöschfunktion. Wählen Sie einfach alle Begriffe in Ihrem Wortschatz aus und klicken Sie auf die Schaltfläche "Löschen":

Geben Sie hier die Bildbeschreibung ein

Wenn Sie dies mit Code tun möchten, sollte Folgendes helfen:

$vocabulary = taxonomy_vocabulary_machine_name_load('my_custom_vocabulary');
foreach (taxonomy_get_tree($vocabulary->vid) as $term) {
  taxonomy_term_delete($term->tid);
}
Clive
quelle
Ok, danke, obwohl Taxo Manager keine Massenauswahloption hat und wenn Sie Hunderte von Begriffen haben, müssten Sie jeden einzeln überprüfen.
Giorgio79
Ja, das ist eigentlich etwas nervig, ich könnte eine Feature-Anfrage dafür stellen
Clive
2
Vielen Dank, dass Sie sowohl die UI- als auch die Codemethode hinzugefügt haben! Immer sehr nützlich +1
Matt Fletcher
5
@ giorgio79 Die meisten modernen Browser unterstützen Umschalt + Klicken Sie auf Kontrollkästchen. Wenn Sie auf ein Kontrollkästchen klicken und dann bei gedrückter Umschalttaste auf ein anderes Kontrollkästchen in derselben Gruppe klicken, werden alle Kontrollkästchen zwischen diesen beiden aktiviert / deaktiviert.
Елин Й.
26

Eine bevorzugte Methode zum Massenlöschen von Inhalten nach Inhaltstyp, Taxonomievokabular usw. verwendet das Modul http://drupal.org/project/devel . Zum Löschen aller Begriffe in einem Vokabular:

  1. Aktivieren Sie die Module Devel und Devel Generate
  2. Gehen Sie zu Entwicklung> Begriffe generieren
  3. Wählen Sie den Wortschatz aus, aus dem Sie Begriffe löschen möchten
  4. Geben Sie "0" für die Anzahl der zu generierenden Begriffe ein
  5. Aktivieren Sie "Vorhandene Begriffe löschen, bevor Sie neue generieren".
  6. Klicken Sie auf Senden

Voila - leerer Wortschatz, sonst unberührt.

Texas-Bronius
quelle
Modul heißt: Devel Generate
Kenorb
6

Sie können den folgenden Befehl verwenden:

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

Wenn es nicht funktioniert, stellen Sie sicher, dass Sie Ihren Cache leeren (z. B. zwischengespeichert).

Oder schneller mit der folgenden Dirty-SQL-Abfrage:

drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = 123"

Wobei 123 Ihre Vokabular-ID ist, die Sie ändern sollten.

Sie können vidIhren Wortschatznamen mit dem folgenden Befehl abrufen:

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

Siehe auch:

Kenorb
quelle
1
das funktioniert einfach wunderbar :-)
Alejandro Moreno
1
Gute Antwort! Sie verdienen mehr Upvotes!
Lautaro Rosales
1
Sie können die beiden sogar kombinieren, wenn Sie sich munter fühlen:drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
Kirkland
2

Admin-Ansichten bieten nur vorkonfigurierte VBO-Ansichten. VBO selbst funktioniert gut mit Begriffen (oder einem anderen Entitätstyp). Installieren Sie VBO selbst und erstellen Sie die gewünschte Ansicht. Löschen Sie die Begriffe dann mit VBO.

Bojan Zivanovic
quelle
2

Verwenden Sie die taxonomy_term_deleteFunktion, indem Sie alle Begriffe durchlaufen, um alle Taxonomiebegriffe in einem Vokabular in Drupal 7 zu löschen .

Betrachten Sie das folgende Beispiel:

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

Noch einfacher, wenn Sie Drush und das Devel- Modul installiert haben, können Sie den folgenden Befehl verwenden, um alle Begriffe in einer Taxonomie * bequem von Ihrer Shell aus zu löschen:

$ drush generate-Terms TAXONOMY_MACHINE_NAME 0 --kill

* Dies setzt voraus, dass Sie das Modul "Entwickeln generieren" aktiviert haben. Dies kann bei Bedarf durchgeführt werden:

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

rjb
quelle
Vielen Dank für die Drush-Generierungsbegriffe, da sie bei Verwendung über die Benutzeroberfläche
explodierten
1

Ich würde empfehlen, Admin-Ansichten mit VBO zu verwenden, um eine Ansicht zu erhalten, die die Standardanzeige von Taxonomie-Begriffen ersetzt.

Was Sie tun müssen, ist Folgendes:

  1. Aktivieren Sie diese Module natürlich
  2. Aktivieren Sie die Ansicht "Administration: Taxonomiebegriffe".
  3. Fügen Sie der Ansicht eine Spalte mit dem Namen "Massenoperationen: Taxonomiebegriff" hinzu.
  4. FLUSH CACHES - gehen Sie dann zu Admin> Struktur> Taxonomie> Spezifisches Vokabular

Ansichten Massenvorgänge und Administratoransichten

Duncanmoo
quelle
1

Ich habe gerade einen Blog-Beitrag darüber geschrieben, wie man hier eine Schaltfläche zum Löschen aller Taxonomiebegriffe hinzufügt .

Im Wesentlichen:

Ich verwende dafür das jQuery Easy Confirm Dialog-Plugin . Zuerst laden Sie die Bibliothek von hier und setzen diese in Ordner Ihre Themen js.

Wir können dann eine Schaltfläche "Alle Begriffe löschen" mit einem kleinen Code in einem benutzerdefinierten Modul hinzufügen:

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

Jetzt müssen wir den Pfad zu unserer Funktion definieren, um die Begriffe zu löschen:

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

Und schließlich fügen Sie die Funktionalität hinzu, um die Begriffe tatsächlich zu löschen:

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);
}
Felix Eve
quelle
0

Um die Antworten zu vervollständigen, gibt es ein Modul, das genau dies tut. Es ist das Modul taxonomy_delete_all_terms . Ich habe es benutzt und es funktioniert.

Bei Websites mit sehr großen Taxonomie-Vokabularen kann das Löschen von Vokabularen aufgrund des Zeitlimits für die Löschanforderung unmöglich werden. Wenn dies geschieht, bevor die Löschtransaktion abgeschlossen ist, wird die Transaktion zurückgesetzt, sodass überhaupt keine Bedingungen gelöscht werden.

TheodorosPloumis
quelle
0

Meine Antwort bezieht sich tangential auf die ursprüngliche Frage. Aufbauend auf der Antwort von Kenorb können Sie Folgendes ausführen , wenn Sie ALLE Vokabeln an Ihrem Standort bereinigen möchten:

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

Wie von @texas_bronius gesagt, wenn Sie die Entwicklungsgenerierung aktiviert haben, können Sie dies verwenden, aber wenn Sie auch drush installiert haben, verwende ich diesen Befehl, wenn Sie noch einen Schritt weiter gehen:

drush generate-term [vocabulary_machine_name] 0 --kill

Und ersetzen Sie einfach [vocabulary_machine_name] durch den Maschinennamen Ihres Vokabulars. Die "0" gibt an, wie viele Begriffe hinzugefügt werden sollen, und "--kill" dient zum Entfernen der aktuell darin enthaltenen Begriffe.

ttamniwdoog
quelle