Bir kelime haznesindeki tüm terimler nasıl silinir (toplu olarak silinir)?


Yanıtlar:


15

Sınıflandırma yöneticisinin toplu silme işlevi vardır, kelime dağarcığınızdaki tüm terimleri seçin ve 'Sil' düğmesini tıklayın:

resim açıklamasını buraya girin

Kodu kullanarak yapmak istiyorsanız, aşağıdakine benzer bir şey yardımcı olacaktır:

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

Tamam teşekkürler, Taxo Manager'da toplu seçim seçeneği olmasa da ve yüzlerce terim varsa, her birini tek tek kontrol etmeniz gerekir.
giorgio79

Evet, bu aslında biraz sinir bozucu, bunun için bir özellik isteği koyabilirim
Clive

2
Hem kullanıcı arayüzü hem de kod yöntemlerini eklediğiniz için teşekkür ederiz! Her zaman çok yararlı +1
Matt Fletcher

5
@ giorgio79 çoğu modern tarayıcı Shift + Click onay kutularını destekler. Bir onay kutusunu, ardından Shift + Aynı gruptaki başka bir onay kutusunu tıklatırsanız, bu 2 arasındaki tüm onay kutuları seçilir / seçilmez.
Елин Й.

26

İçeriği içerik türüne, sınıflandırma sözlüğüne vb . Göre toplu olarak silmenin favori bir yöntemi http://drupal.org/project/devel modülünü kullanır . Bir kelime haznesindeki tüm terimleri silmek için:

  1. Devel ve Devel Generate modüllerini etkinleştirin
  2. Geliştirme> Terimler Oluştur'a gidin
  3. Terimleri silmek istediğiniz Kelime dağarcığını seçin
  4. Oluşturulacak Terim sayısı için "0" girin
  5. "Yenilerini oluşturmadan önce mevcut terimleri sil" seçeneğini işaretleyin
  6. Gönder'i tıklayın

Voila-- boş kelime, aksi takdirde dokunulmamış.


Modül denir: Devel Generate
kenorb

6

Aşağıdaki komutu kullanabilirsiniz:

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

Çalışmazsa, önbelleğinizi temizlediğinizden emin olun (örn. Memcached).

Veya aşağıdaki kirli SQL sorgusunu kullanarak daha hızlı bir şekilde:

drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = 123"

123 kelimesi değiştirmeniz gereken kelime kimliğinizdir.

Sen alabilirsiniz vidşu komutla ederek kelime isim:

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

Ayrıca bakınız:


1
güzelce çalışır :-)
Alejandro Moreno

1
Mükemmel cevap! Daha fazla oy hak ediyorsun!
Lautaro Rosales

1
Frisky hissediyorsanız, ikisini bile birleştirebilirsiniz: drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
Kirkland

2

Yönetici görünümleri yalnızca önceden yapılandırılmış VBO görünümleri sağlar. VBO'nun kendisi terimlerle (veya başka bir varlık türüyle) iyi çalışır VBO'yu kendiniz yükleyin ve istediğiniz görünümü oluşturun, ardından terimleri silmek için VBO'yu kullanın.


2

Drupal 7'deki bir kelime haznesindeki tüm sınıflandırma terimlerini toplu olarak silmek için, taxonomy_term_deleteişlevi tüm terimler arasında döngü yaparak kullanın .

Aşağıdaki örneği düşünün:

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

Daha da kolay, eğer Drush ve Devel modülü yüklüyse, bir sınıflandırmadaki * tüm terimleri kabuğunuzun rahatlığından toplu olarak silmek için aşağıdaki komutu kullanabilirsiniz:

$ drush terimleri TAXONOMY_MACHINE_NAME 0 - öldür

* Bu, gerektiğinde yapılabilecek Devel Generate modülünü etkinleştirdiğinizi varsayar:

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


oluşturmak için patladı çünkü drush oluşturmak-terimler için teşekkürler
GiorgosK

1

Taksonomi terimlerinin varsayılan görüntüsünü değiştirmek için bir görünüm elde etmek üzere Yönetici Görünümlerini VBO ile kullanmanızı öneririm .

Yapmanız gereken şudur:

  1. Elbette bu modülleri etkinleştirin
  2. "Yönetim: Sınıflandırma terimleri" adlı görünümü etkinleştir
  3. Görünüme "Toplu işlemler: Sınıflandırma terimi" adlı bir sütun ekleyin
  4. FLUSH CACHES - daha sonra Yönetici> Yapı> Sınıflandırma> Özel Kelime

Toplu İşlemler ve Yönetici Görünümlerini Görüntüleme


1

Buradaki tüm sınıflandırma terimlerini silmek için nasıl bir düğme ekleneceği hakkında bir blog yazısı yazdım .

esasen:

Bunun için jQuery Easy Confirm Dialog eklentisini kullanıyorum . Önce kütüphaneyi buradan indirin ve bunu temalar js klasörüne koyun.

Daha sonra özel bir modüle küçük bir kod içeren bir "Tüm Şartları Sil" düğmesi ekleyebiliriz:

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

Şimdi terimleri silmek için işlevimizin yolunu tanımlamamız gerekiyor:

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

Ve son olarak terimleri gerçekten silmek için işlevsellik ekleyin:

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

Sadece cevapları tamamlamak için tam olarak bunu yapan bir modül var. Öyle taxonomy_delete_all_terms modülü. Ben kullandım ve işe yarıyor.

Çok büyük Sınıflandırma sözcük dağarcığı olan sitelerde, silme isteği zaman aşımı terimi nedeniyle kelime dağarcığını silmek imkansız olabilir. Bu, silme işlemi tamamlanmadan önce gerçekleşirse, işlem geri alınır ve hiçbir terimin silinmesine neden olmaz.


0

Cevabım orijinal soru ile teğet olarak ilişkilidir. Bina kenorb en Eğer sitesinde TÜM sözlükleri temizlemek istiyorsanız, aşağıdaki çalıştırabilir, cevap:

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

@Texas_bronius tarafından söylendiği gibi, devel oluşturmayı etkinleştirdiyseniz, bunu kullanabilirsiniz, ancak bir adım daha ileri giderseniz, ayrıca drush yüklüyse, bu komutu kullanırım:

drush create-terms [kelime_makine_adı] 0 - öldür

Ve sadece [vocabulary_machine_name] yerine kelime dağarcığınızın makine adını yazın. "0", kaç terim ekleneceğine ve "--kill" şu anda orada bulunan terimleri kaldırmak içindir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.