Điểm:0

Làm cách nào để di chuyển trường đoạn lồng nhau?

lá cờ fi

Tôi có một đoạn bao bọc, Bố cục (para_layout), có các trường sau.

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

Tôi đã tạo các đoạn văn và cấu trúc trường giống nhau trong trang web Drupal 9. Tôi đã tạo plugin di chuyển tùy chỉnh sau.

id: custom_para1
nhãn: Di chuyển đoạn tùy chỉnh
migration_group: tùy chỉnh
thẻ_di chuyển:
  - nút
nguồn:
  plugin: d7_paragraphs_item
  gói: para_layout
tiến trình:
  trường_left_column: trường_left_column
  trường_bên phải_cột: trường_bên phải_cột
điểm đến:
  plugin: 'entity_reference_revisions:paragraph'
  default_bundle: para_layout

drush mim custom_para1 cho thấy nó đang xử lý các mục, nhưng tôi không thể thấy bất kỳ dữ liệu nào được chuyển đến các bảng trường tương ứng.

Nó hoạt động tốt khi các trường là trường văn bản bình thường thay vì trường đoạn văn.

Kevin avatar
lá cờ in
Trước tiên, bạn phải di chuyển dữ liệu đoạn văn, sau đó di chuyển các bản ghi máy chủ của chúng mà nút đề cập đến để kết nối hai bản ghi này.
ARUN avatar
lá cờ fi
@apaderno, vì vậy các bản ghi máy chủ sẽ được chèn trực tiếp qua SQL hoặc nó cũng có thể được di chuyển qua di chuyển yml?
apaderno avatar
lá cờ us
Bạn di chuyển các bản ghi lưu trữ giống như cách bạn di chuyển dữ liệu đoạn văn. Tôi sẽ chờ nhận xét từ @Kevin, vì nhận xét đầu tiên được đăng bởi anh ấy.
ARUN avatar
lá cờ fi
@apaderno Tôi đã cố di chuyển mục máy chủ nhưng kết quả vẫn như vậy. Chương trình Drush đã xử lý nội dung nào đó nhưng không có nội dung nào hiển thị trong DB (Tôi đã di chuyển nội dung đoạn văn). Tôi có nên thay đổi 'plugin đích' thành thứ khác không?
Điểm:3
lá cờ fr

Đây là cách tôi đã có thể đạt được nó.

Di chuyển đoạn:

id: fup_balance_csv_import

....
....

tiến trình:
  trường_upload: trường_upload
  trường_tải xuống: trường_tải xuống
  trường_total: field_total

điểm đến:
  plugin: entity_reference_revisions:đoạn văn
  default_bundle: fup_balance

Di chuyển nút:

id: subscribe_list_csv_import

.............
........

tiến trình:
  # Trường đoạn văn.
  pseudo_field_fup_details:
    -
      plugin: di chuyển_lookup
      di chuyển: fup_balance_csv_import
      nguồn: tiêu đề # Mã định danh duy nhất.
  trường_fup_details:
    -
      plugin: sub_ process
      nguồn:
        - '@pseudo_field_fup_details'
      tiến trình:
        target_id: '0'
        target_revision_id: '1'

Điều này là bằng cách sử dụng Quy trình di chuyển tiêu chuẩn. Đôi khi nó có thể không hữu ích khi bạn cần viết plugin di chuyển của riêng mình. Dưới đây là cách để làm điều đó.

# Trường đoạn văn.
trường_quốc gia_thời_gian:
  -
    plugin: country_timezones_paragraphs
    nguồn: 
      trường_1: nguồn_trường_1
      trường_2: nguồn_trường_2

Plugin di chuyển:

<?php

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

sử dụng Drupal\Core\Plugin\ContainerFactoryPluginInterface;
sử dụng Drupal\migrate\MigrateExecutableInterface;
sử dụng Drupal\migrate\ProcessPluginBase;
sử dụng Drupal\di chuyển\Row;
sử dụng Symfony\Component\DependencyInjection\ContainerInterface;
sử dụng Drupal\paragraphs\Entity\Paragraph;
sử dụng Drupal\Core\Logger\LoggerChannelFactoryInterface;

/**
 * Cung cấp plugin di chuyển quốc gia_timezones.
 *
 * Cách sử dụng:
 *
 * @mã số
 * tiến trình:
 *   quán ba:
 * plugin: country_timezones_paragraphs
 * nguồn: source_field_name
 * @endcode
 *
 * @MigrateProcessPlugin(
 * id = "quốc gia_múi giờ_đoạn",
 * handle_multiples = TRUE
 * )
 */
class CountryTimezonesParagraphs extends ProcessPluginBase thực hiện ContainerFactoryPluginInterface {

  /**
   * Dịch vụ ghi nhật ký.
   *
   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
   */
  $logger được bảo vệ;

  /**
   * Xây dựng plugin CountryTimezones.
   *
   * @param mảng $configuration
   * Cấu hình plugin.
   * @param chuỗi $plugin_id
   * ID plugin.
   * @param hỗn hợp $plugin_definition
   * Định nghĩa plugin.
   * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger
   * Các dịch vụ logger.
   */
  hàm công khai __construct(mảng $configuration, $plugin_id, $plugin_definition, LoggerChannelFactoryInterface $logger) {
    cha mẹ::__construct($configuration, $plugin_id, $plugin_definition);
    $this->logger = $logger->get('countries_list_migration');
  }

  /**
   * {@inheritdoc}
   */
  tạo hàm tĩnh công khai (ContainerInterface $container, mảng $configuration, $plugin_id, $plugin_definition) {
    trả về tĩnh mới (
      cấu hình $,
      $plugin_id,
      $plugin_definition,
      $container->get('logger.factory')
    );
  }

  /**
   * {@inheritdoc}
   */
  hàm công khai biến đổi($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {

  $paragraphs =[];
  
   if (isset($value)) {
      $paragraphs[] = $this->createCountryTimezonesParagraphsItem($value);
    }

    trả lại các đoạn $;
  }

  /**
   * {@inheritdoc}
   */
  hàm công khai nhiều(): bool {
    trả về ĐÚNG;
  }


  chức năng được bảo vệ createCountryTimezonesParagraphsItem(mảng $item): mảng {

    $paragraph = Đoạn::tạo([

      'type' => 'country_timezones',

      'trường_1' => [
        'giá trị' => $item['field_1'],
      ],
      'trường_2' => [
        'giá trị' => $item['field_2'],
      ],
    ]);

    $paragraph->save();

    trở lại [
      'đích_id' => $paragraph->id(),
      'target_revision_id' => $paragraph->getRevisionId(),
    ];
  }

}

Hy vọng hữu ích của nó.

Điểm:0
lá cờ in

Như tôi đã nói trong (các) nhận xét, các plugin hiện đảm bảo các bộ sưu tập trường được di chuyển sang các gói Đoạn văn và tương tự cho các Đoạn văn d7. Dữ liệu trường không được di chuyển, đây là khoảng trống mà bạn hiện cần tự điền vào. Vì vậy, bạn phải viết định nghĩa di chuyển YAML để thực hiện việc này.

Gần đây tôi đã thực hiện di chuyển từ d7 sang d9 có yêu cầu này (với cả Bộ sưu tập trường trong hỗn hợp mà chúng tôi đã chuyển).

Bạn sẽ cần tạo (các) di chuyển bằng plugin nguồn (các truy vấn SQL tìm nạp dữ liệu bạn cần cắm vào) để thực hiện những việc sau:

  1. Di chuyển tất cả các đoạn thực tế và dữ liệu trường của chúng
  2. Di chuyển các đoạn giữ đoạn (giữ dữ liệu trường)
  3. Di chuyển các bản ghi của các thực thể tham chiếu các đoạn đang giữ các đoạn từ bước 2 (sử dụng migration_lookup để tìm id đích mới của chúng trong D9).
ARUN avatar
lá cờ fi
Sẽ thật tuyệt nếu bạn có thể cung cấp một tệp yaml mẫu để tham khảo. Như tôi đã đề cập trong câu hỏi, yaml mà tôi đã thử không hoạt động.

Đă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.