Mam duże słownictwo, a poglądy administracyjne nie działają jeszcze dla taksonomii. Taksonomia również tego nie robi. Czy są jakieś opcje usuwania zbiorczego terminu?
Mam duże słownictwo, a poglądy administracyjne nie działają jeszcze dla taksonomii. Taksonomia również tego nie robi. Czy są jakieś opcje usuwania zbiorczego terminu?
Odpowiedzi:
Menedżer taksonomii ma funkcję usuwania zbiorczego, wystarczy wybrać wszystkie terminy w słowniku i kliknąć przycisk „Usuń”:
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);
}
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:
Voila - puste słownictwo, inaczej nietknięte.
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ć.
vid
Nazwę 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ż:
drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
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.
Aby zbiorczo usunąć wszystkie terminy taksonomii w słowniku w Drupal 7, użyj taxonomy_term_delete
funkcji, 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
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:
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);
}
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.
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);}}'
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ą.