it-swarm.com.de

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

Ich habe einen großen Wortschatz und Administratoransichten funktioniert noch nicht für die Taxonomie. Taxonomy Manager macht das auch nicht. Gibt es Optionen zum Löschen von Massenbegriffen?

10
giorgio79

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":

enter image description here

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

Eine bevorzugte Methode zum Massenlöschen von Inhalten nach Inhaltstyp, Taxonomie-Vokabular 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.

26
texas-bronius

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 vid Ihres Wortschatznamens mit dem folgenden Befehl abrufen:

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

Siehe auch:

6
kenorb

Um alle Taxonomiebegriffe innerhalb eines Vokabulars in Drupal 7) in großen Mengen zu löschen, verwenden Sie taxonomy_term_delete Funktion durch Durchlaufen aller Begriffe.

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

2
rjb

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

2
Bojan Zivanovic

Ich würde empfehlen, Admin Views 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

Views Bulk Operations and Admin Views

1
Duncanmoo

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 Plugin jQuery Easy Confirm Dialog . Laden Sie zuerst die Bibliothek von hier herunter und legen Sie diese in Ihrem Themenordner ab.

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="/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);
}
1
Felix Eve

Meine Antwort bezieht sich tangential auf die ursprüngliche Frage. Aufbauend auf kenorb's Antwort: Wenn Sie ALLE Vokabulare an Ihrer Site bereinigen möchten, können Sie Folgendes ausführen:

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
Screenack

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 auch drush installiert haben:

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.

0
ttamniwdoog

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.

0