Làm thế nào để nhập khẩu phân loại với phân cấp?


7

Chúng tôi đang nâng cấp trang web của chúng tôi từ D7 lên D8, nơi có từ vựng chứa hệ thống phân cấp cha-con đa cấp. Danh sách quá dài (khoảng 5K-10K điều khoản) để nhập thủ công.

Chúng tôi đã cố gắng sử dụng di cư D8 Core và mở rộng nó bằng cách sử migrate_plusmigrate_tools module. Những hoạt động thực sự tốt khi không có hệ thống phân cấp hạn.

Làm thế nào chúng ta có thể làm cho nó hoạt động để nhập thuật ngữ với phân cấp. Giá trị mà nó chấp nhận cho cha mẹ là id hạn. Nếu chúng ta vượt qua tên cha mẹ (khi chúng ta nhập nó lần đầu tiên), nó sẽ tạo ra thuật ngữ ở cấp độ gốc. Chúng ta có thiếu thứ gì không? Nếu chúng ta không thể làm điều này chỉ với các mô-đun này, làm thế nào chúng ta có thể mở rộng các mô-đun này. Tài liệu tham khảo cũng sẽ đánh giá rất cao.


1
Có thể là một lỗi vì plugin nguồn di chuyển cho các thuật ngữ phân loại có mã rõ ràng tìm kiếm thuật ngữ phân loại chính. Chỉnh sửa: có một bài kiểm tra cốt lõi nói rằng nó thực sự đang hoạt động - api.drupal.org/api/drupal/ mẹo
mradcliffe

Nó hoạt động khi chuyển ID kỳ hạn gốc, nhưng tôi muốn làm cho nó hoạt động để nhập cha mẹ cũng như nhập con cùng một lúc. Cảm ơn đã chia sẻ liên kết, sẽ kiểm tra liên kết và xem tôi có thiếu gì không.
Yogesh

Câu trả lời:


5

Hơi muộn một chút, nhưng tôi nghĩ tôi vừa giải quyết chuyện này ...

Trong tệp Migrate.whthing.yml của bạn, bạn phải thêm một plugin quy trình trong nguồn gốc:

destination:
  plugin: entity:taxonomy_term

process:
  vid: vocab
  name: name
  weight: weight
  parent:
    -
      plugin: migration
      migration: whatever // This should be the name of your current migration
      source: parent // This is the name of the source field
      no_stub: true
    -
      plugin: default_value // Not required, but useful for large data sets
      default_value: 0

1
Muộn chưa? Chỉ mới đầu giờ chiều ở đây ...
Pierre.Vriens

5

Nếu bạn muốn nhập Taxonomy with Hierarchycùng với hiện có tidthì hãy làm theo các bước sau. Định cấu hình cấu hình nhập của bạn một số thứ như thế này

id: taxonomy_migration
class: null
field_plugin_method: null
cck_plugin_method: null
migration_tags:
 - CSV
migration_group: null
label: 'Taxonomy migration from CSV'
source:
  plugin: csv
  path: test.csv //path of file
  header_row_count: 1
  keys:
    - tid //unique key which is used for mapping while importing other content related with this taxonomy
process:
  parent: //this is for your parent term id
    plugin: migration_lookup
    migration: taxonomy_migration //this is the current migration id which will help you to make parent child on taxonomy
    source: pid //parent id source from your csv file
  name: term
  tid: tid
destination:
  plugin: 'entity:taxonomy_term'
  default_bundle: test_taxonomy //your vocabulary machine name where you want to import 
migration_dependencies: null
migration_dependencies: null

bây giờ csvtập tin của bạn sẽ như thế này

nhập mô tả hình ảnh ở đây

bây giờ bạn có thể kiểm tra phân loại của bạn, kết quả sẽ giống như trong hình dưới đây với hiện tại tid.

nhập mô tả hình ảnh ở đây


0

Giải pháp thay thế cho mô-đun Di chuyển là sử dụng mô-đun Xuất nhập CSV có thời hạn hỗ trợ nhập danh sách các thuật ngữ có cấu trúc cha.

Định dạng ví dụ của tệp CSV:

name,description,format,weight,parent_name,[any_additional_fields]

0

Có một mô-đun có thể nhập các thuật ngữ phân loại phân cấp một cách dễ dàng. Hãy xem phiên bản mô-đun Drupal 8 và tên của nó là Nhà nhập khẩu phân loại phân cấp .

Điều này có thể nhập các thuật ngữ ở cấp độ lồng nhau từ tệp CSV. Đây là liên kết của mô-đun.

https://www.drupal.org/project/hti

Không có giới hạn cho chiều sâu mối quan hệ cha mẹ con.


0

Xem Bản vá này: https://www.drupal.org/project/drupal/issues/2965938#comment-12587479

# This patch file was generated by NetBeans IDE
# It uses platform neutral UTF-8 encoding and \n newlines.
--- a/core/modules/migrate/src/MigrateExecutable.php
+++ b/core/modules/migrate/src/MigrateExecutable.php
@@ -363,8 +363,18 @@
           $break = FALSE;
           foreach ($value as $scalar_value) {
             try {
-              $new_value[] = $plugin->transform($scalar_value, $this, $row, $destination);
+//              $new_value[] = $plugin->transform($scalar_value, $this, $row, $destination);
+                // reserve salar value
+                            $result = $plugin->transform($scalar_value, $this, $row, $destination);
+                            // fix parent_id always return null on MigrationLookup::transform
+                            if (is_null($result)) {
+                                if ($scalar_value) {
+                                    $new_value[] = $scalar_value;
             }
+                            } else {
+                                $new_value[] = $result;
+                            }
+            }
             catch (MigrateSkipProcessException $e) {
               $new_value[] = NULL;
               $break = TRUE;

0

Tôi hơi thất vọng với việc sử dụng các mô-đun di chuyển và tôi nhanh chóng bắt đầu sử dụng các tập lệnh của riêng mình. Bên dưới tập lệnh để nhập phân loại theo phân cấp:

// You would first have to create an array $results from csv or other source
// Make sure you have tid, title and parent in your set
foreach($results as $result) {
  Term::create([
    'tid' => $result->tid,
    'name' => $result->name,
    'vid' => 'MY_NEW_VOCABULARY'
  ])->enforceIsNew()->save();
}
// Reload and resave to add hierarchy 
foreach($results as $result) {
  $term = Term::load($result->tid);
  $term->parent = ['target_id' => $result->parent];
  $term->save();
}
// Smile! You imported your tags while keeping their tid and hierarchy

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.