Jak usunąć wszystkie terminy ze słownika (usuwanie zbiorcze)?


Odpowiedzi:


15

Menedżer taksonomii ma funkcję usuwania zbiorczego, wystarczy wybrać wszystkie terminy w słowniku i kliknąć przycisk „Usuń”:

wprowadź opis zdjęcia tutaj

Jeśli chcesz to zrobić za pomocą kodu, coś takiego powinno pomóc:

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

Ok, dziękuję, chociaż Taxo Manager nie ma opcji wyboru zbiorczego, a jeśli masz setki terminów, musisz sprawdzić każdy po kolei.
giorgio79

Tak, to trochę denerwujące, mógłbym poprosić o taką funkcję
Clive

2
Dziękujemy za dodanie zarówno interfejsu użytkownika, jak i metod kodu! Zawsze bardzo przydatne +1
Matt Fletcher

5
@ giorgio79 większość nowoczesnych przeglądarek obsługuje Shift + kliknij pola wyboru. Jeśli klikniesz pole wyboru, a następnie Shift + kliknij inne pole wyboru w tej samej grupie, wszystkie pola wyboru między tymi 2 zostaną zaznaczone / odznaczone.
Елин Й.

26

Ulubiona metoda masowego usuwania treści według typu zawartości, słownictwa systematyki itp. Wykorzystuje moduł http://drupal.org/project/devel . Aby usunąć wszystkie terminy ze słownika:

  1. Włącz moduły Devel i Devel Generate
  2. Przejdź do Development> Generuj warunki
  3. Wybierz Słownik, z którego chcesz usunąć warunki
  4. Wpisz „0”, aby określić liczbę warunków do wygenerowania
  5. Zaznacz „Usuń istniejące warunki przed wygenerowaniem nowych”
  6. Kliknij Prześlij

Voila - puste słownictwo, inaczej nietknięte.


Moduł nazywa się: Devel Generate
kenorb 28.09.13

6

Możesz użyć następującego polecenia:

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

Jeśli to nie działa, upewnij się, że wyczyściłeś pamięć podręczną (np. Memcached).

Lub szybszy sposób, używając następującego brudnego zapytania SQL:

drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = 123"

Gdzie 123 to twój identyfikator słownictwa, który powinieneś zmienić.

vidNazwę swojego słownika możesz uzyskać, wykonując następujące polecenie:

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

Zobacz też:


1
to działa pięknie po prostu :-)
Alejandro Moreno

1
Świetna odpowiedź! Zasługujesz na więcej pochwał!
Lautaro Rosales,

1
Możesz nawet połączyć te dwa, jeśli czujesz się rozbrykany: drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
Kirkland,

2

Widoki administracyjne zapewniają tylko wstępnie skonfigurowane widoki VBO. Sam VBO działa dobrze z warunkami (lub dowolnym innym typem jednostki) Zainstaluj VBO samodzielnie i utwórz żądany widok, a następnie użyj VBO, aby usunąć warunki.


2

Aby zbiorczo usunąć wszystkie terminy taksonomii w słowniku w Drupal 7, użyj taxonomy_term_deletefunkcji, zapętlając wszystkie terminy.

Rozważ następujący przykład:

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

Jeszcze łatwiejsze, jeśli masz zainstalowany Drush i moduł Devel , możesz użyć następującego polecenia, aby zbiorczo usunąć wszystkie terminy w taksonomii * z wygody powłoki:

$ drush generuje warunki TAXONOMY_MACHINE_NAME 0 - zabójstwo

* Zakłada się, że masz włączony moduł Devel Generate, co można zrobić w razie potrzeby:

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


dzięki za warunki generowania drusha, ponieważ był wysadzony, gdy był używany z interfejsu użytkownika
GiorgosK

1

Polecam korzystanie z widoków administratora w VBO, aby uzyskać widok zastępujący domyślne wyświetlanie warunków taksonomii.

Co musisz zrobić, to:

  1. Włącz oczywiście te moduły
  2. Włącz widok o nazwie „Administracja: warunki taksonomii”
  3. Dodaj kolumnę do widoku o nazwie „Operacje zbiorcze: termin systematyki”
  4. FLUSH CACHES - następnie przejdź do Administrator> Struktura> Taksonomia> Określony Vocab

Widoki Operacje zbiorcze i Widoki administratora


1

Właśnie napisałem wpis na blogu o tym, jak dodać przycisk, aby usunąć wszystkie warunki taksonomii tutaj .

Głównie:

Używam do tego wtyczki jQuery Easy Confirm Dialog . Najpierw pobierz bibliotekę stąd i umieść ją w folderze js motywów.

Następnie możemy dodać przycisk „Usuń wszystkie warunki” z małym kodem w niestandardowym module:

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

Teraz musimy zdefiniować ścieżkę do naszej funkcji, aby usunąć warunki:

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

I wreszcie dodaj funkcjonalność, aby faktycznie usunąć warunki:

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

Aby uzupełnić odpowiedzi, moduł właśnie to robi. Jest to moduł taxonomy_delete_all_terms . Użyłem go i działa.

W przypadku witryn z bardzo dużymi słownikami taksonomii usunięcie słowników może być niemożliwe z powodu przekroczenia limitu czasu żądania usunięcia. Kiedy dzieje się to przed zakończeniem transakcji usuwania, transakcja jest wycofywana, co powoduje, że żadne warunki nie są usuwane.


0

Moja odpowiedź jest stycznie związana z pierwotnym pytaniem. Opierając się na odpowiedzi kenorba , jeśli chcesz wyczyścić WSZYSTKIE słowniki na swojej stronie, możesz uruchomić następujące czynności:

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

Jak powiedział @texas_bronius, jeśli masz włączone generowanie devel, możesz tego użyć, ale idąc o krok dalej, jeśli masz również zainstalowany Drush, używam tego polecenia:

drush generuj-terminy [nazwa_komputera] 0 - zabij

I po prostu zamień [vocabulary_machine_name] na nazwę maszyny twojego słownictwa. „0” oznacza liczbę terminów do dodania, a „--kill” oznacza usunięcie tych, które się tam obecnie znajdują.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.