Làm thế nào để loại bỏ các thuật ngữ trùng lặp trong một từ vựng


8

Tôi có một từ vựng với nhiều thuật ngữ trùng lặp. Làm thế nào tôi có thể loại bỏ những điều khoản?

Tôi có nhiều bản sao; Tôi cần một cách để xóa chúng mà không xóa từng cái một.

Câu trả lời:


2

Chạy mã này một lần trong hook_init hoặc khối php tùy chỉnh hoặc sử dụng drush

<?php

$vid = 1; // Replace 1 by vocabulary id for which you want to remove duplicates.

$terms = taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities = FALSE);

// Loop through all terms in vocabulary
foreach ($terms as $term) {
  // Get all matching terms by term name
  $matching_terms = taxonomy_get_term_by_name($term->name);
  foreach ($matching_terms as $matching_term) {
    /* Check matching term belongs to vocabulary we are searching and matching term should not be exact term that first found so that duplicate can be removed */
    if ($matching_term->vid == $vid && $matching_term->tid != $term->tid) {
      // Do Term Delete
      taxonomy_term_delete($matching_term->tid); 
    } 
  }
}

?>

Lưu ý quan trọng: Hãy sao lưu cơ sở dữ liệu trước khi chạy mã ở trên, để bạn có thể khôi phục nếu có sự cố!


1
Cần lưu ý rằng điều này xóa các thuật ngữ mà không cập nhật hoặc kiểm tra các tham chiếu đến các nút khác. Nó rất nguy hiểm.
Christian

3

Các Merge hạn mô-đun có thể giúp bạn.

Khi sử dụng phân loại cho các mục đích gắn thẻ miễn phí, thật dễ dàng để kết thúc với một số thuật ngữ có cùng ý nghĩa. Điều này có thể là do lỗi chính tả hoặc người dùng khác chỉ đơn giản là tạo ra các thuật ngữ đồng nghĩa khi họ đi.

Sau đó, bạn, với tư cách là quản trị viên, có thể muốn sửa các lỗi đó hoặc thống nhất các thuật ngữ đồng nghĩa, từ đó cắt xén phân loại thành một tập hợp dễ quản lý hơn. Mô-đun này cho phép bạn hợp nhất nhiều thuật ngữ thành một, đồng thời cập nhật tất cả các trường đề cập đến các thuật ngữ đó để đề cập đến thuật ngữ thay thế.


Đây chắc chắn là lựa chọn tốt nhất.
Christian

2

Bạn có thể làm điều này bằng cách sử dụng Quy tắc, Để làm điều này:

**Event**
After updating existing content

Tôi đã chọn sau khi cập nhật một nội dung để bạn có thể chọn tất cả các nút và chọn cập nhật, có thể không được công bố / xuất bản - cập nhật bí danh url, bất kỳ sẽ hoạt động.

**Conditions**
Content is of type 

và nhập loại nội dung của bạn

**Actions**
Add loop

Đảm bảo các vòng lặp thông qua các thẻ của bạn, tên máy của tôi là "thẻ cơ bản trường" để bạn chọn một cái gì đó như "nút: trường-thẻ-cơ sở" trong bộ chọn Dữ liệu vòng lặp.

sau đó bạn sẽ thêm một hành động vào vòng lặp đó,

Add an item to a list

Chọn "danh sách mục: cha mẹ" từ bộ chọn dữ liệu

Và đánh dấu vào hộp duy nhất và có thể bạn cũng có thể thêm,

Show a message on the site

để đảm bảo mã của bạn hoạt động.

đây là một xuất khẩu của quy tắc.

    { "rules_enforce_uniqness_tag" : {
    "LABEL" : "Enforce Uniqness Tag",
    "PLUGIN" : "reaction rule",
    "REQUIRES" : [ "rules" ],
    "ON" : [ "node_update" ],
    "IF" : [
      { "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "page" : "page" } } } }
    ],
    "DO" : [
      { "LOOP" : {
          "USING" : { "list" : [ "node:field-basic-tags" ] },
          "ITEM" : { "list_item" : "Current list item" },
          "DO" : [
            { "list_add" : {
                "list" : [ "list-item:parent" ],
                "item" : [ "list-item" ],
                "unique" : 1
              }
            }
          ]
        }
      },
      { "drupal_message" : { "message" : "Done" } }
    ]
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.