Điểm:0

Di chuyển một mảng giá trị thành nhiều thực thể

lá cờ ph

Tôi đang sử dụng mô-đun di chuyển/migrate_plus để nhập tệp CSV và tạo thực thể.

Một trong các cột trong CSV có thể chứa nhiều giá trị như 1|2|3 mà tôi đang chuyển đổi thành một mảng bằng cách sử dụng:

_khu vực pháp lý:
  plugin: phát nổ
  nguồn: thẩm quyền
  dấu phân cách: "|"

Sau đó, tôi đang sử dụng mảng để tạo các thuật ngữ phân loại với điều này:

lĩnh vực_chính trị_huyện:
  -
    plugin: thực thể_generate
    nguồn: "@_khu vực pháp lý"
    entity_type: taxonomy_term
    gói: chính trị_huyện
    bundle_key: vid
    value_key: tên
    bỏ qua_case: đúng
    giá trị:
      field_display_name: ???

Tôi bị mắc kẹt ở hai điều:

  • Tôi muốn nối thêm một giá trị không đổi cho mỗi tên để tên thuật ngữ phân loại trở thành "1, XYZ" trong đó XYZ xuất phát từ hằng số/ABC
  • Tôi muốn field_display_name là giá trị có tiền tố là "Quận"

Bất kỳ suy nghĩ về làm thế nào để thực hiện hai điều đó?

lá cờ ru
Điều này có trả lời câu hỏi của bạn không? [Làm cách nào để sử dụng concat plugin quy trình di chuyển trên nhiều giá trị?](https://drupal.stackexchange.com/questions/307731/how-to-use-migrate- process-plugin-concat-on-multiple-values)
Lambic avatar
lá cờ ph
Tôi đã thử sử dụng str_replace, nhưng nó không nhận ra các hằng số, vì vậy nếu tôi đặt thay thế thành hằng số/ABC, tôi sẽ nhận được "hằng số/ABC" theo nghĩa đen. Ngoài ra, tôi không chắc mình sẽ sử dụng điều đó như thế nào trong trường hợp thứ hai là cài đặt field_display_name.
lá cờ ru
Chỉ `nguồn:` mới có thể chứa tham chiếu, tất cả các khóa khác được định cấu hình và sử dụng theo giá trị. Nó có thể *dễ chịu về mặt thẩm mỹ* nếu được cung cấp `hằng số/thứ gì đó`, nhưng về mặt kỹ thuật, việc viết chuỗi của bạn vào `replace: 'foo'` được mã hóa cứng giống như viết nó vào `hằng số/thứ gì đó: 'foo'`
Lambic avatar
lá cờ ph
Vâng, đó là lý do tại sao tôi không thể sử dụng str_replace. Hằng số đến từ Deriver nên sẽ khác nhau tùy thuộc vào csv nào đang được xử lý.
lá cờ ru
CHỈNH SỬA: Nếu bạn đang sử dụng phiên bản lõi>9.2, bạn có thể tạo một số [gọi lại với unpack_source](https://www.drupal.org/node/3205079)
Lambic avatar
lá cờ ph
Cảm ơn, đó là cách mọi thứ đang diễn ra, chỉ muốn xác nhận rằng không có cách nào vượt trội .. Tôi sẽ đăng plugin của mình dưới dạng câu trả lời khi tôi hoàn thành.
lá cờ ru
Bạn có thể sử dụng lệnh gọi lại v9.2 mới và tạo các biến trợ giúp trong phần quy trình của mình.
Điểm:1
lá cờ ph

Đây là plugin tùy chỉnh mà tôi đã viết xong:

<?php

không gian tên Drupal\mymodule\Plugin\migrate\ process;

sử dụng Drupal\migrate\MigrateExecutableInterface;
sử dụng Drupal\di chuyển\Row;
sử dụng Drupal\migrate_plus\Plugin\migrate\ process\EntityGenerate;
sử dụng Drupal\migrate_plus\Plugin\migrate\ process\EntityLookup;

/**
 * Plugin này tạo các thực thể quận trong plugin quy trình.
 *
 * @MigrateProcessPlugin(
 * id = "huyện_tạo"
 * )
 *
 * @see EntityGenerate
 *
 * @mã số
 * tiến trình:
 * lĩnh_vực_chính_trị:
 * plugin: District_generate
 * nguồn: thẩm quyền
 * District_set_name: hằng/ABC
 * District_set_value: "@_district_set"
 * tiền tố: "Quận"
 * ... cấu hình entityGenerate khác
 * @endcode
 */
class DistrictGenerate extends EntityGenerate {

  /**
   * {@inheritdoc}
   */
  hàm công khai biến đổi($value, MigrateExecutableInterface $migrateExecutable, Row $row, $destinationProperty) {
    $this->row = $row;
    $this->migrateExecutable = $migrateExecutable;
    $name = $value;
    if (isset($this->configuration['district_set_name'])) {
      $suffix = $row->get($this->configuration['district_set_name']);
      $name = $name . ', ' . hậu tố $;
    }
    // Tạo một thực thể nếu tra cứu xác định nó không tồn tại.
    if (!($result = EntityLookup::transform($name, $migrateExecutable, $row, $destinationProperty))) {
      if (isset($this->configuration['district_set_value'])) {
        $this->configuration['values']['field_district_set'] = $this->configuration['district_set_value'];
      }
      $prefix = $this->configuration['prefix'] ?? 'Quận';
      $this->configuration['default_values']['field_display_name'] = $prefix . ' ' . giá trị $;
      $result = $this->generateEntity($name);
    }
    trả lại kết quả $;
  }

}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.