วิธีลบคำศัพท์ทั้งหมดออกจากคำศัพท์ (ลบเป็นกลุ่ม) ได้อย่างไร


10

ฉันมีคำศัพท์จำนวนมากและมุมมองของผู้ดูแลระบบยังไม่สามารถใช้กับอนุกรมวิธานได้ Taxonomy Managerก็ไม่ได้ทำเช่นนี้ มีตัวเลือกสำหรับการลบคำจำนวนมากหรือไม่

คำตอบ:


15

ผู้จัดการ Taxonomy มีฟังก์ชั่นการลบจำนวนมากเพียงแค่เลือกคำศัพท์ทั้งหมดในคำศัพท์ของคุณแล้วคลิกปุ่ม 'ลบ':

ป้อนคำอธิบายรูปภาพที่นี่

ถ้าคุณต้องการที่จะทำมันโดยใช้โค้ดอย่างที่ควรจะเป็น:

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

โอเคขอบคุณแม้ว่าผู้จัดการ Taxo ไม่มีตัวเลือกการเลือกเป็นกลุ่มและหากคุณมีหลายร้อยคำคุณจะต้องตรวจสอบทีละคน
giorgio79

ใช่มันเป็นเรื่องที่น่ารำคาญจริง ๆ ฉันอาจส่งคำขอคุณสมบัติสำหรับสิ่งนั้น
ไคลฟ์

2
ขอขอบคุณที่เพิ่มทั้ง UI และวิธีการใช้โค้ด! มีประโยชน์มากเสมอ +1
Matt Fletcher

5
@ giorgio79 เบราว์เซอร์ที่ทันสมัยที่สุดรองรับ Shift + คลิกที่ช่องทำเครื่องหมาย หากคุณคลิกช่องทำเครื่องหมายแล้วกด Shift + คลิกที่ช่องทำเครื่องหมายอื่นในกลุ่มเดียวกันช่องทำเครื่องหมายทั้งหมดระหว่าง 2 ช่องจะถูกเลือก / ไม่ได้เลือก
ЕлинЙ

26

วิธีการที่ชื่นชอบในการลบเนื้อหาจำนวนมากตามประเภทเนื้อหาคำศัพท์ด้านภาษีและอื่น ๆ ใช้ประโยชน์จากโมดูลhttp://drupal.org/project/devel สำหรับการลบคำศัพท์ทั้งหมดในคำศัพท์:

  1. เปิดใช้งานโมดูล Devel และ Devel Generate
  2. ไปที่การพัฒนา> สร้างข้อกำหนด
  3. เลือกคำศัพท์ที่คุณต้องการลบคำศัพท์
  4. ป้อน "0" เพื่อจำนวนข้อตกลงที่จะสร้าง
  5. ทำเครื่องหมายที่ "ลบคำที่มีอยู่ก่อนสร้างคำใหม่"
  6. คลิกส่ง

Voila-- คำศัพท์ว่างเปล่า


โมดูลถูกเรียกว่า: Devel Generate
kenorb

6

คุณสามารถใช้คำสั่งต่อไปนี้:

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

ถ้ามันไม่ทำงานตรวจสอบให้แน่ใจว่าคุณล้างแคชของคุณ (เช่น memcached)

หรือวิธีที่เร็วกว่าโดยใช้คิวรี่ SQL สกปรกต่อไปนี้:

drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = 123"

ที่ 123 คือรหัสคำศัพท์ของคุณที่คุณควรเปลี่ยน

คุณสามารถรับvidชื่อคำศัพท์ได้จากคำสั่งต่อไปนี้:

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

ดูสิ่งนี้ด้วย:


1
ที่ใช้งานได้ง่ายเพียง :-)
Alejandro Moreno

1
คำตอบที่ดี! คุณสมควรได้รับการโหวตมากขึ้น!
Lautaro Rosales

1
คุณสามารถรวมสองอย่างนี้เข้าด้วยกันหากคุณรู้สึกร่าเริง: drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
เคิร์กแลนด์

2

มุมมองผู้ดูแลระบบเพียงแสดงมุมมอง VBO ที่กำหนดรูปแบบล่วงหน้า VBO ใช้งานได้ดีกับข้อกำหนด (หรือประเภทเอนทิตีอื่น ๆ ) ติดตั้ง VBO ด้วยตัวคุณเองและสร้างมุมมองที่คุณต้องการจากนั้นใช้ VBO เพื่อลบข้อกำหนด


2

หากต้องการลบคำศัพท์อนุกรมวิธานทั้งหมดจำนวนมากภายในคำศัพท์ใน Drupal 7 ให้ใช้taxonomy_term_deleteฟังก์ชันโดยวนลูปผ่านคำทั้งหมด

ลองพิจารณาตัวอย่างต่อไปนี้:

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

ง่ายยิ่งขึ้นถ้าคุณติดตั้งโมดูลDrushและDevelแล้วคุณสามารถใช้คำสั่งต่อไปนี้เพื่อลบคำศัพท์ทั้งหมดใน taxonomy * จากความสะดวกสบายของเชลล์:

$ drush Generic Terms TAXONOMY_MACHINE_NAME 0 - ฆ่า

* นี่ถือว่าคุณเปิดใช้งานโมดูล Devel Generate ซึ่งสามารถทำได้หากต้องการ:

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


ขอบคุณสำหรับข้อตกลง drush สร้างเพราะมันระเบิดขึ้นเมื่อใช้จาก UI
GiorgosK

1

ฉันอยากจะแนะนำให้ใช้มุมมองของผู้ดูแลระบบกับVBOเพื่อรับมุมมองเพื่อแทนที่การแสดงเริ่มต้นของคำศัพท์อนุกรมวิธาน

สิ่งที่คุณต้องทำคือ:

  1. เปิดใช้งานโมดูลเหล่านั้นแน่นอน
  2. เปิดใช้งานมุมมองที่เรียกว่า "การดูแลระบบ: ข้อกำหนดด้านภาษี"
  3. เพิ่มคอลัมน์ลงในมุมมองที่เรียกว่า "การดำเนินการเป็นกลุ่ม: คำศัพท์อนุกรมวิธาน"
  4. ล้างแคช - จากนั้นไปที่ผู้ดูแลระบบ> โครงสร้าง> อนุกรมวิธาน> คำศัพท์เฉพาะ

มุมมองการทำงานเป็นกลุ่มและมุมมองผู้ดูแลระบบ


1

ผมเคยเขียนเป็นเพียงแค่โพสต์บล็อกเกี่ยวกับวิธีการเพิ่มปุ่มลบแง่อนุกรมวิธานทั้งหมดที่นี่

เป็นหลัก:

ฉันใช้ปลั๊กอินโต้ตอบการยืนยัน jQuery Easyสำหรับสิ่งนี้ ก่อนดาวน์โหลดไลบรารี่จากที่นี่และใส่ไว้ในโฟลเดอร์ js ของธีมของคุณ

จากนั้นเราสามารถเพิ่มปุ่ม“ ลบข้อกำหนดทั้งหมด” ด้วยรหัสเล็กน้อยในโมดูลที่กำหนดเอง:

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

ตอนนี้เราจำเป็นต้องกำหนดพา ธ ไปที่ฟังก์ชันของเราเพื่อลบข้อกำหนด:

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

และสุดท้ายเพิ่มฟังก์ชันการทำงานเพื่อลบข้อกำหนด:

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

เพียงแค่ทำคำตอบให้สมบูรณ์ก็มีโมดูลทำสิ่งนี้ มันเป็นโมดูลtaxonomy_delete_all_terms ฉันใช้มันแล้วมันได้ผล

สำหรับเว็บไซต์ที่มีคำศัพท์อนุกรมวิธานขนาดใหญ่มากการลบคำศัพท์อาจเป็นไปไม่ได้เนื่องจากคำขอร้องให้ลบคำนั้นออก เมื่อสิ่งนั้นเกิดขึ้นก่อนที่การทำธุรกรรมการลบจะเสร็จสิ้นธุรกรรมจะถูกย้อนกลับทำให้ไม่ต้องลบข้อกำหนดใด ๆ


0

คำตอบของฉันเกี่ยวข้องกับคำถามดั้งเดิม อาคารkenorb ของคำตอบถ้าคุณต้องการที่จะทำความสะอาดคำศัพท์ทั้งหมดในเว็บไซต์ของคุณคุณสามารถทำงานต่อไปนี้:

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 หากคุณเปิดใช้งาน devel create คุณสามารถใช้สิ่งนั้นได้ แต่เพิ่มอีกหนึ่งขั้นถ้าคุณติดตั้ง drush ด้วยฉันใช้คำสั่งนี้:

drush generate-terms [ศัพท์_machine_name] 0 --kill

และเพียงแทนที่ [dictionary_machine_name] ด้วยชื่อเครื่องของคำศัพท์ของคุณ "0" มีไว้สำหรับจำนวนคำที่จะเพิ่มและ "- ฆ่า" คือการลบคำที่อยู่ในนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.