Büyük bir kelime hazinem var ve yönetici görüşleri henüz sınıflandırma için çalışmıyor. Sınıflandırma Yöneticisi de bunu yapmaz. Toplu vadeli silme için herhangi bir seçenek var mı?
Büyük bir kelime hazinem var ve yönetici görüşleri henüz sınıflandırma için çalışmıyor. Sınıflandırma Yöneticisi de bunu yapmaz. Toplu vadeli silme için herhangi bir seçenek var mı?
Yanıtlar:
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:
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);
}
İç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:
Voila-- boş kelime, aksi takdirde dokunulmamış.
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:
drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
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.
Drupal 7'deki bir kelime haznesindeki tüm sınıflandırma terimlerini toplu olarak silmek için, taxonomy_term_delete
iş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
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:
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);
}
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.
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);}}'
@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.